大家都知道公共场所的Wifi安全性很差,但并不清楚究竟有多差。大多以为只要不上QQ、不登陆网站账号就没事了,看看新闻小说什么的应该毫无关系。
的确如此,看看新闻网页没有涉及任何敏感的账号信息。即便是数据明文传输,Hacker也只能嗅探到你看了哪些新闻,这些毫无价值的信息。
不过如此守株待兔的嗅探,似乎也太被动了。既然我们能主动控制流量,何必用这种弱爆了的方法呢?
--------------------------------------------------
在上一篇文章《把笔记本改造成无线路由器 —— 手机抓包牛刀小试》里提到如何实现Wifi的流量拦截,并做出更大范围的攻击。
今天,我们使用一种古老的技术,打造一个巧妙的时光机原型。让我们的脚本能穿越到未来运行,不再受时间与空间的限制,实现超长诅咒!
(全图链接:http://images.cnitblog.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事件,即可获取所有资源请求的回应数据。之前已提到,缓存时间是必要条件,修改时间是充分条件。修改时间早说明这个资源不经常改变,可以放心用!
首先我们过滤掉缓存很短的资源,很快就过期的资源是没有利用价值的。然后按上修改时间的先后排序,最终为每个站点选择稳定度最优的几个资源。
代码实现很简单(sniffer.js):
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
我们测试几个常用的大网站(url.txt):
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
根据返回的数据来看(-几天没修改 / +缓存几天),资源的修改时间远比缓存时间短,不过仍有少数可以利用的。
$ phantomjs sniffer.js == www.hao123.com ==================== -5 / +360 http://s0.hao123img.com/v3/Mr/T0/gh/sn/61/6/hao123.js -92 / +360 http://s0.hao123img.com/res/js/track.js?380890 == www.taobao.com ==================== -6 / +3650 http://a.tbcdn.cn/s/kissy/gallery/??search-suggest/1.0/index-min.js,search-suggest/1.0/plugin/history-min.js,search-suggest/1. 0/plugin/local-query-min.js,search-suggest/1.0/plugin/storage-min.js,search-suggest/1.0/plugin/tab-min.js,search-suggest/1.0/plugin/telephone-min.js?t =20130606190449 -6 / +3650 http://a.tbcdn.cn/s/kissy/1.3.0/??node-min.js,dom/base-min.js,event/dom/base-min.js,event/base-min.js,event/dom/focusin-min.js ,anim-min.js,event/custom-min.js,switchable-min.js,cookie-min.js,ajax-min.js,json-min.js,rich-base-min.js,base-min.js,combobox-min.js,component/base-m in.js,menu-min.js,component/extension-min.js,xtemplate/facade-min.js,xtemplate/runtime-min.js,xtemplate/compiler-min.js?t=20130606190449 == www.kaixin001.com ==================== -14 / +365 http://s.kaixin001.com.cn/js/apps/reg/ARegister-00100c612.js -80 / +365 http://s.kaixin001.com.cn/js/core/media/MediaBox-0002a9159.js == www.baidu.com ==================== -5 / +3650 http://s1.bdstatic.com/r/www/cache/static/user/js/u_75caac89.js -5 / +3650 http://s1.bdstatic.com/r/www/cache/static/global/js/home_f949edf5.js == www.baidu.com/s?wd=ss ==================== -5 / +3650 http://s1.bdstatic.com/r/www/cache/static/global/js/common_7fd3f7db.js == www.renren.com ==================== -7 / +365 http://s.xnimg.cn/a56656/n/core/base-all2.js -88 / +365 http://s.xnimg.cn/a53726/n/apps/login/login-v6.js == tieba.baidu.com ==================== -4 / +30 http://tb1.bdstatic.com/tb/static-spage/component/feed_data/feed_data_c51ac7ba.js -8 / +30 http://tb1.bdstatic.com/tb/static-common/js/tb_ui_ac13f64f.js == map.baidu.com ==================== -7 / +365 http://webmap1.map.bdimg.com/init_0gj0re.js -8 / +365 http://webmap2.map.bdimg.com/main_hntng4.js == weibo.com ==================== -9 / +15 http://js.t.sinajs.cn/t5/register/js/page/login/index.js?version=201306141810 -30 / +15 http://js1.t.sinajs.cn/t4/apps/publicity/static/wbad.js?version=201306141810 == www.sina.com.cn ==================== -141 / +223 http://i2.sinaimg.cn/jslib/modules2/sina/util/1.0.5/util.js -169 / +203 http://i2.sinaimg.cn/jslib/modules2/seajs/1.3.0/sea.js == www.mop.com ==================== -365 / +300 http://mopimg.cn/tj/dcq.js -427 / +300 http://mopimg.cn/dc/tj.js == www.tianya.cn ==================== -38 / +29 http://static.tianyaui.com/global/ty/TY.js == bbs.tianya.cn ==================== -7 / +29 http://static.tianyaui.com/global/lite/js/lite-all.js?v=201306070836 -15 / +25 http://static.tianyaui.com/global/lite/js/bbs/bbs.js?v=201306070836 == user.qzone.qq.com ==================== -31 / +7 http://imgcache.qq.com/ptlogin/ver/10031/js/h_login_11.js?max_age=604800&ptui_identifier=000D29EE4BA374D65D39E3C1BB890C8E50025 6813D2C4E549471141C == www.163.com ==================== -32 / +90 http://img2.126.net/ntesrich/auto/indexU/dlbox-index-v1.0.1-130506.js -51 / +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 DONE!