從零開(kāi)始寫(xiě)網(wǎng)站登錄爆破(一)
0x00簡(jiǎn)述
本文從零開(kāi)始介紹一個(gè)網(wǎng)站登錄爆破腳本的編寫(xiě)過(guò)程,通過(guò)腳本模擬網(wǎng)站登錄的作用有以下幾點(diǎn):
1,web類(lèi)安全工具需要一個(gè)強(qiáng)大的爬蟲(chóng)爬取目標(biāo)網(wǎng)站的所有頁(yè)面,以確認(rèn)漏洞利用點(diǎn)。
如果遇到需要登錄才能爬取的情況,可以爬蟲(chóng)直接模擬登錄過(guò)程。
2,已知部分信息,爆破網(wǎng)站后臺(tái),為下一步的滲透做準(zhǔn)備。
關(guān)于登錄爆破在《blackhat python》這本書(shū)中有一個(gè)例子,但是我用requests和beautifulsoup做了一些修改,后續(xù)還會(huì)以此為基礎(chǔ)添加更多的功能。
0x01網(wǎng)站的認(rèn)證過(guò)程
要模擬登錄網(wǎng)站就要知道網(wǎng)站的登錄認(rèn)證過(guò)程,這里以joomla這款開(kāi)源cms為例。
配置瀏覽器使用代理,本地127.0.0.1 8080端口,我使用了owasp zap
這款工具,其他的工具如Burpsuite或者直接F12 都可以查看到包的信息。
第一步,首先訪問(wèn)后臺(tái)登錄頁(yè)面,抓包查看發(fā)現(xiàn)返回包中包含“SetCookie”響應(yīng)頭,cookie此時(shí)作為認(rèn)證用戶身份的憑據(jù),且每次訪問(wèn)都會(huì)改變。
第二步,接著POST方法提交登錄信息,同樣抓包查看
可以看到包里的參數(shù)不只有賬號(hào)密碼,還有token(用于防御CSRF)還有task等等。
認(rèn)證的同時(shí)要抓取頁(yè)面表單的其他input標(biāo)簽的name和value。joomla的較為簡(jiǎn)單,網(wǎng)站一般不會(huì)明文傳輸用戶名和密碼,遇到這種情況需要分析引入的js文件,模擬加密算法。
第三步,可以通過(guò)代理歷史頁(yè)面看到,post請(qǐng)求觸發(fā)了303跳轉(zhuǎn)跳回了原url相當(dāng)于又實(shí)現(xiàn)了一次GET請(qǐng)求,可以查看到這次請(qǐng)求攜帶了之前設(shè)置的cookie。
到這里網(wǎng)站的基本認(rèn)證流程就結(jié)束了,接著我們用工具自動(dòng)化
0x02HTTP方法
登錄過(guò)程中用到了兩種方法,GET和POST方法,用reqeusts實(shí)現(xiàn)很簡(jiǎn)單
import requests res_get=requests.get(url) res_post=requests.post(url,data=data,cookies=cookies,headers=headers)
其中data屬性接收一個(gè)dict作為post的數(shù)據(jù),cookies和headers
請(qǐng)求頭都可以自己定義,將準(zhǔn)備好的請(qǐng)求頭用dict封裝就可以偽造一個(gè)firefox瀏覽器的請(qǐng)求
cookie處理的兩種方法
cookie值在第一次請(qǐng)求目標(biāo)url的時(shí)候就已經(jīng)設(shè)定好了
res_get.headers['Set-Cookie']讀取響應(yīng)頭取出set-cookie字段解析成dict
另一種 cookies=res.cookies 自動(dòng)處理可以直接傳入