說到暴力破解大家首先想到的肯定是hydra,的確hydra的確非常強大,支援幾乎所有的弱密碼破解。hydra本身使用c語言開發,效能很高,很適合學習。
但今天我們使用的是patator,patator本身使用python開發,最新版本也就4000行左右,可以說小到極致,這主要多虧了python庫的豐富和強大。
比較遺憾的是需要自己提供密碼字典,下面我們就揭開patator的真面目。
先來掃個telnet弱密碼,看下效果:
其中telnet_login,意思是掃telnet,其中user.txt是使用者名稱字典,passwd.txt是密碼字典
patator和hydra都會交叉使用者名稱和密碼檔案,通過上訴比較我們可以看出,兩者最大不同點在於,hydra直接可以輸出成功的使用者名稱和密碼,但patator只輸出認證後資訊。
這也導致了hydra比patator更好用,但難免會有誤報。
其中telnet模組原始碼如下:
# telnet }}
把核心部分抽出來,流程是這樣的。
建立乙個連線到telnetlib.telnet物件fp -->> 等待出現匹配正則(\w+:)字元出現(如 login:,username等)
-->> 傳送使用者名稱 -->>繼續等待(\w+:)出現(如passwd:,password:) -->> 傳送密碼 ->> 等待(\w+:)出現,輸出返回字串
過程就是這麼簡單,其中expect函式接受二個引數,第乙個是正規表示式的列表,可以是編譯好的,也可以是字串,第二個是超時時間。
返回乙個三項的tuple,第乙個是匹配到的正則序號(從0開始),第二個是匹配match的物件,第三個是直到正則的返回資料(包括匹配內容)
這說的有點抽象。
請看下面:
從上面我們可以很明顯看出,匹配的正則是按順序的,雖然返回資料中,『bo'在』lo'之前,但由於在正則列表中『lo'在前,所以資料一致讀到』lo'。
到這裡為止,大家應該對patator如何去爆telnet弱密碼基本了解了。
但如果我們想直接得出破解的使用者名稱和密碼,這該怎麼辦呢?
有一種思路就是提供乙個錯誤的使用者名稱和密碼,儲存返回的內容,然後每次獲取要測試的使用者名稱和密碼的回內容,通過比較兩次的結果就可以結果了。但由於返回內容會千奇百怪,所以要做較多的特殊處理。
如以下**:
import telnetlib
class telnet_check:
def __init__(self,host,port=23,timeout=10):
self.host=host
self.port=port
self.timeout=timeout
self.promote='\w+:'
self.errmsg=''
self.geterrmsg()
def connect(self):
return telnetlib.telnet(self.host,self.port,self.timeout)
def geterrmsg(self):
f=self.connect()
f.expect([self.promote],self.timeout)
f.write('nullnull\r')
f.expect([self.promote],self.timeout)
f.write('nullnull\r')
_,_,self.errmsg=f.expect([self.promote],self.timeout)
self.errmsg=self.errmsg.strip()
def check(self,user,passwd):
t=self.connect()
t.expect([self.promote],self.timeout)
t.write(user+'\r')
_,_,p=t.expect([self.promote],self.timeout)
if p.strip() == self.errmsg:
return false
t.write(passwd+'\r')
_,_,loginmsg=t.expect([self.promote],self.timeout)
loginmsg=loginmsg.strip()
if self.errmsg != '' and self.errmsg != loginmsg:
return true
else:
return false
if __name__=='__main__':
tn=telnet_check('127.0.0.1')
print tn.check('yihaibo','1')
print tn.check('root','root')
print tn.check('admin','admin')
執行結果如下:
我們發現這的確是一種可行的辦法。這也給hydra誤報帶來了解決辦法。
由於每次都建立telnetlib.telnet物件比較浪費資源,patator使用了快取來解決這個問題,但這裡我一直有乙個疑問,為啥telnet物件可以快取,如果親明白,教教我吧!
telnet_login的父類tcp_cache簡化**如下:
class tcp_cache:
def __init__(self):
self.cache = {} #
for w in set(warnings):
mods, url, ver = dependencies[w]
if name in mods:
print('error: %s %s (%s) is required to run %s.' % (w, ver, url, name))
abort = true
上面這是我簡化後的**,從中可以看出,有乙個全域性變數列表warning,每次匯入需要的庫時,如果匯入失敗,則將庫名加入warning,當我們通過命令列傳遞使用哪個模組時,如我們使用pycurl,這時我們發現在warnings中含有「pycurl",所以就提示我們需要安裝庫,而且很智慧型的將庫的位址也給我們了。
由於是弱密碼掃瞄,字典肯定不小,那麼為了追求速度,肯定要使用執行緒,patator預設使用10個執行緒去跑,這部分**主要在控制部分中(class controller),**還是有點小複雜的。
gqueues = [queue(maxsize=10000) for _ in range(self.num_threads)]
# consumers
for num in range(self.num_threads):
pqueue = queue(maxsize=1000)
t = thread(target=self.consume, args=(gqueues[num], pqueue))
t.daemon = true
t.start()
# producer
t = thread(target=self.produce, args=(gqueues,))
t.daemon = true
t.start()
正如你所看到的,啟用了兩個最經典的執行緒,乙個produce,乙個consume,兩者通訊使用的是queue。self.num_threads是可配的,通過命名行中指定 -t,否則將是預設的10個執行緒。
到這裡就要和大家說再見了,patator原始碼還是值得一讀的,剩下的就交給你們自己行動了。
HASH暴力破解工具 Hashcat
烏雲網看到一篇文章講述hashcat的使用簡介 戳這裡 對使用字典破解md5內容 簡單在kali上嘗試了一下。1 首先檢視了下hashcat的幫助文件,簡單擷取了其中的部分常用說明。hashcat,advanced password recovery usage hashcat options ha...
暴力破解 字典工具
kali自帶了以下幾個好用的外部字典。cewl工具可以自動爬取 關鍵字後生成字典檔案。cewl www.example.com m 6 w example cewl.txt m引數,生成的密碼最小位數為6 w引數,指定字典生成的位置和名稱 etc john john.conf檔案儲存著john工具的...
Hydra(暴力破解工具)引數
r 根據上一次進度繼續破解 s 使用ssl協議連線 s 指定埠 l 指定使用者名稱 l 指定使用者名稱字典 檔案 p 指定密碼破解 p 指定密碼字典 檔案 e 空密碼探測和指定使用者密碼探測 ns c 使用者名稱可以用 分割 username password 可以代替 l username p p...