自上一篇博客介紹瀏覽器通信以來已經(jīng)過去將近兩個(gè)月了,兜兜轉(zhuǎn)轉(zhuǎn)挖了不少坑,也走了很多彎路。期間研究saml2.0和單點(diǎn)登錄等技術(shù)都最后無疾而終。
只有xss框架這部分堅(jiān)持了下來,這個(gè)框架還有很多事情需要完善,不過總算是有了一點(diǎn)小成果,很開心~~~
代碼放到了這里對(duì)照著看效果更好
https://github.com/littleworldwar/pybeef
0x00web服務(wù)器設(shè)計(jì)
(1)tornado處理請(qǐng)求和Application類
要編寫一個(gè)Tornado應(yīng)用中最多的工作是定義類繼承Tornado的RequestHandler類,主要用于將特定的url對(duì)應(yīng)到不同的類。
通過在類中定義get和post函數(shù)處理對(duì)應(yīng)的請(qǐng)求,self.write()用于將內(nèi)容輸出到返回流中。
self.render()將特定的文件內(nèi)容渲染后作為輸出,指定文件名即可。
self.get_argument()獲取請(qǐng)求的參數(shù)
self.set_header()設(shè)置HTTP返回頭
如果碰到復(fù)雜的服務(wù)器需求需要重寫Application類,在__init__函數(shù)中定義handlers和setting。Handlers主要是將所有的url路徑和對(duì)應(yīng)的handler類對(duì)應(yīng)起來,Setting中設(shè)置了template_path 設(shè)置模板路徑主要用于self.render()函數(shù)查找文件路徑。
(2)控制臺(tái)登錄設(shè)計(jì)
為了處理登錄表單和配置文件中的用戶名密碼進(jìn)行校驗(yàn),先要定義一個(gè)LoginPageHandler類,處理登錄的post請(qǐng)求取出用戶名密碼等參數(shù),將參數(shù)與用configparser解析配置文件的數(shù)據(jù)進(jìn)行對(duì)比,一致則通過認(rèn)證。
同時(shí)還有cookie的設(shè)計(jì)為了在已經(jīng)登錄過的情況下直接使用get方法就能進(jìn)入控制臺(tái)頁面。
(3)提供給受害瀏覽器執(zhí)行的js文件
處理xss漏洞產(chǎn)生的get請(qǐng)求,將hook.js作為請(qǐng)求的響應(yīng)。同時(shí)生成32位隨機(jī)數(shù),在hook瀏覽器中設(shè)置cookie,設(shè)置hook_id作為hook瀏覽器的唯一標(biāo)識(shí)。
(4)控制臺(tái)請(qǐng)求hook瀏覽器的數(shù)據(jù)
連接數(shù)據(jù)庫(kù)查詢?yōu)g覽器的數(shù)據(jù),使用pymongo模塊連接本地?cái)?shù)據(jù)庫(kù)。
將信息組織成json結(jié)構(gòu),由于mongodb默認(rèn)插入的_id值屬于Object不能放到輸入流中,我們刪除了_id這一項(xiàng)。并將這些信息按照順序標(biāo)好。
由于控制臺(tái)使用AJAX跨域請(qǐng)求,需要設(shè)置返回頭Access-Control-Allow-Orign,將其設(shè)置為通配符* 也就是匹配一切地址。否則瀏覽器不能讀取返回的數(shù)據(jù)。
(5)hook瀏覽器的輪詢處理
Hook瀏覽器執(zhí)行了hook.js后臺(tái)post方法發(fā)送瀏覽器信息,同時(shí)要帶上在cookie中設(shè)置的hook_id來標(biāo)識(shí)瀏覽器。要讓AJAX請(qǐng)求同時(shí)攜帶cookie,在后臺(tái)設(shè)置返回頭 Access-Control-Allow-Credentials為true。
將收集的信息存入數(shù)據(jù)庫(kù),如果hook_id存在不會(huì)重復(fù)插入數(shù)據(jù)。
0x01hook瀏覽器的信息收集設(shè)計(jì)
(1)收集瀏覽器的user-agent(用戶代理)
瀏覽器的user-agent是瀏覽器的身份標(biāo)識(shí),簡(jiǎn)稱UA。每次向服務(wù)器發(fā)出請(qǐng)求的時(shí)候都會(huì)在請(qǐng)求頭中帶上UA參數(shù)。例如 Mozilla/5.0 (X11; Linux x86_64;) Gecko/20100101 Firefox/45.0。包含了瀏覽器的版本,操作系統(tǒng)的類型,瀏覽器的渲染引擎等信息
(2)收集瀏覽器版本
即便在UA中可以獲取到部分瀏覽器的版本,但是UA是可以人為修改的,判斷瀏覽器版本不能全依賴UA。而且例如IE edge瀏覽器的UA是 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393。可以看出其中同樣包含了Chrome和Safari瀏覽器的信息,依靠UA并不能準(zhǔn)確判斷瀏覽器版本。瀏覽器中一般擴(kuò)展了自己獨(dú)特的方法,例如window.chrome wind