大家都知道公共場所的Wifi安全性很差,但並不清楚究竟有多差。大多以為只要不上QQ、不登陸網站賬號就沒事了,看看新聞小說什么的應該毫無關系。
的確如此,看看新聞網頁沒有涉及任何敏感的賬號信息。即便是數據明文傳輸,Hacker也只能嗅探到你看了哪些新聞,這些毫無價值的信息。
不過如此守株待兔的嗅探,似乎也太被動了。既然我們能主動控制流量,何必用這種弱爆了的方法呢?
--------------------------------------------------
在上一篇文章《把筆記本改造成無線路由器 —— 手機抓包牛刀小試》里提到如何實現Wifi的流量攔截,並做出更大范圍的攻擊。
今天,我們使用一種古老的技術,打造一個巧妙的時光機原型,讓我們的腳本能穿越到未來運行。即便今天只看了幾個小說網頁,也能在未來幾天甚至幾星期后,打開其他網站時釋放我們的代碼。
讓入侵不再受時間與空間的限制,實現超長詛咒!
(全圖鏈接:https://images0.cnblogs.com/blog/273626/201306/26213334-97186026e3b948db928704244c6cb830.png)
原理其實非常簡單,相信大家看完圖就明白了。
1. 當有人連上我們創建的AP時,他的命運已掌控在我們手中了!
2~5. 他訪問任何網站,我們的Web代理就能在其中插入一段腳本代碼了。當然這不是一般的廣告的代碼,而是預加載各大網站所用到的腳本文件。
6~7. 一切都在我們掌控之中,我們並非返回真正的腳本庫文件。事實上一次預加載那么多文件,很是浪費帶寬~ 我們只返回一個很小的“樁文件”,讓他在未來打開網頁時再加載真正的文件。此外,這個“樁文件”里我們還可以額外加些其他腳本:) 由於這些腳本庫通常有着很長的緩存時間,因此只要在用戶在清空緩存之前,始終從本地緩存里讀取這個文件!
8~12. 即使用戶離開了公共場所,但常用的腳本文件都已被感染並緩存。只要未來某一天登陸我們預先感染的網站,腳本將穿越時空被喚醒!
由此看來,只要實現了第1步,之后的幾乎都是順理成章了!
不過並非所用的人都是小白,還是有不少警惕性高的用戶,不會輕易連接沒有密碼的公開wifi。事實上很多餐廳咖啡店的wifi都是設置了公開的密碼的。
對於這種情況,我們就需要一個功率更大的AP了,並且將SSID與密碼設置的和咖啡店的完全一致 —— 根據wifi的連接策略,同樣的熱點名將會優先選擇信號更好的。如果密碼也一樣,他們就能順利的連上我們的AP。於是我們的熱點就像磁金石一樣,將新來的用戶統統吸過來,於是可以盡情的掌控了~~~
不過最終的難點卻不在此,要找出每個網站緩存最久的腳本資源才是重中之重。
事實上,光看緩存時間是遠遠不夠的 —— 有不少文件設置了很久的緩存,但是他們卻經常的更新。最常見的就是帶時間戳或哈希值的腳本URL,他們幾乎三兩天換一個,卻有很長的緩存時間,這顯然是不可取的。因此,我們需要根據資源的緩存時間和上次修改時間,來衡量其穩定程度。
為了能方便從各大網站尋找穩定度較高的資源,我們使用PhantomJS來實現自動化分析。PhantomJS是沒有界面的命令行Webkit瀏覽器,使用它來模擬網站的訪問,能為我們節省大量的系統資源。
我們監聽page.onResourceReceived事件,即可獲取所有資源請求的回應數據。之前已提到,緩存時間是必要條件,修改時間是充分條件。修改時間早說明這個資源不經常改變,可以放心用!
首先我們過濾掉緩存很短的資源,很快就過期的資源是沒有利用價值的。然后按上修改時間的先后排序,最終為每個站點選擇穩定度最優的幾個資源。
代碼實現很簡單:
https://raw.github.com/EtherDream/closurether/master/tool/cache-sniffer/sniffer.js
我們測試幾個常用的大網站(url.txt):

www.hao123.com www.taobao.com www.renren.com www.kaixin001.com www.baidu.com www.baidu.com/s?wd=ss tieba.baidu.com map.baidu.com weibo.com www.sina.com.cn www.mop.com www.tianya.cn bbs.tianya.cn www.youku.com user.qzone.qq.com qzone.qq.com www.163.com mail.163.com www.126.com www.sohu.com
根據返回的數據來看(-幾天沒修改 / +緩存幾天),每個站點下都有不少很久沒有修改的腳本文件。
E:\NodeJS\closurether\tool\cache-sniffer>phantomjs sniffer.js == www.hao123.com ==================== -2 / +360 http://s0.hao123img.com/res/js/track.js?381633 == www.taobao.com ==================== -497 / +3650 http://a.tbcdn.cn/apps/med/other/p4p/p4p_show_link.js?rd=20120305.js -229 / +3650 http://a.tbcdn.cn/apps/matrix-mission/feedback/feedback.js -178 / +3650 http://a.tbcdn.cn/s/kissy/gallery/??offline/1.0/index-min.js?t=20130701201313 == www.renren.com ==================== -631 / +365 http://s.xnimg.cn/a12023/jspro/beacon.js -491 / +365 http://s.xnimg.cn/n/apps/photo/modules/seed/photoSeed.js?r=1373879537560 -454 / +365 http://s.xnimg.cn/a36267/js/register/register-xn6207-v6.js == www.kaixin001.com ==================== -737 / +365 http://s.kaixin001.com.cn/js/core/ScrollObserver-000179b73.js -732 / +365 http://s.kaixin001.com.cn/js/core/Geometry-0001de487.js -715 / +365 http://s.kaixin001.com.cn/js/core/cookie/Cookie-0001f6c85.js == tieba.baidu.com ==================== -40 / +30 http://static.tieba.baidu.com/tb/pms/wpo.pda.js?v=2.8 -20 / +3600 http://img.baidu.com/hunter/tiebamonkey.min.20130625.js -18 / +30 http://tb1.bdstatic.com/tb/static-common/js/tb_ui_ac13f64f.js == weibo.com ==================== -40 / +15 http://js.t.sinajs.cn/t5/register/js/page/login/index.js?version=201307151712 == map.baidu.com ==================== -238 / +3600 http://img.baidu.com/hunter/map.js?st=-15902 -53 / +365 http://webmap1.map.bdimg.com/monitor/pdc_jfjmuk.js -5 / +365 http://webmap1.map.bdimg.com/initmap_gn34ay.js == www.tianya.cn ==================== -12 / +30 http://static.tianyaui.com/global/ty/TY.js == user.qzone.qq.com ==================== -7 / +7 http://imgcache.qq.com/ptlogin/ver/10034/js/h_login_11.js?max_age=604800&ptui_identifier=000E0133918D62675822E216CC1D89FE3A9C1A8B432218E564A3DD6F0B == www.163.com ==================== -716 / +7 http://l.bst.126.net/rsc/js/jquery-1.6.2.min.js -297 / +90 http://img2.126.net/ntesrich/auto/adbox/adbox-v1.1.2-120705.js -83 / +90 http://img2.126.net/ntesrich/auto/indexU/fcbox-index-v1.0.0-130422.js == www.sohu.com ==================== -42 / +90 http://js.sohu.com/pv/pvclick1211071116.js -42 / +90 http://js.sohu.com/pv/spv1209061800.js == www.mop.com ==================== -969 / +299 http://mopimg.cn/openjs/jquery-1.4.4.min.js -458 / +299 http://mopimg.cn/dc/tj.js -396 / +299 http://mopimg.cn/tj/dcq.js == bbs.tianya.cn ==================== -301 / +30 http://static.tianyaui.com/global/ty/stat/stat_20080313.js?_=1373879558250 -38 / +30 http://static.tianyaui.com/global/lite/js/lite-all.js?v=201306250800 -27 / +30 http://static.tianyaui.com/global/lite/js/bbs/bbs.js?v=201306250800 DONE!
很好,有了這些數據,就可實現我們計划了!
下一篇將介紹使用NodeJS來打造這一計划。