TCP会话劫持的应对
336 | 2015-05-14 13:50
不知道放在这个区里对不对,因为后面要用到javascript来解决问题,所以发在这里,如有不妥请告知。
事情起因:
最近点击各大电商主页,均被劫持至替人赚钱的链接,京东,当当,1号店无一幸免。各种花样的劫持,基本上就是靠Javasript吃饭。样本如下:
<!DOCTYPE html><html><body><script type="text/javascript">var u = 'http://www.hao360c.com/NgSuwor462.html', ua = navigator.userAgent.toLowerCase();if (u.indexOf('jd.com') > 0){var cc = document.cookie.split(';');for (var i = 0; i < cc.length; i++){var name = cc[i].split("=")[0];document.cookie = name + '=; domain=.jd.com; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';}document.cookie = 'hz=0; domain=www.jd.com; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';}if (ua.indexOf('applewebkit') > 0){var h = document.createElement('a');h.rel = 'noreferrer';h.href = u;document.body.appendChild(h);var evt = document.createEvent("MouseEvents");evt.initEvent("click", true, true);h.dispatchEvent(evt);} else {document.write('<meta http-equiv="Refresh" Content="0; Url=' + u + '" >');}</script></body></html> http://count.chanet.com.cn/click.cgi?a=527165&d=22338&u=&e=&url=http%3A%2F%2Fwww.jd.com <html><head><style type="text/css">html,frameset{matgin:0px;width:100%;height:100%;}</style></head><frameset rows="*"><frame src="http://www.hao360c.com/NgSuwor466.html" name="fb" frameborder="0"></frameset></html> <html><head><style type="text/css">html,frameset{matgin:0px;width:100%;height:100%;}</style></head><frameset rows="*"><frame src="http://www.hao360c.com/NgSuwor464.html" name="fb" frameborder="0"></frameset></html>
上网搜了一下TCP会话劫持,从lake2大侠那里学了点皮毛,参见《某电商网站流量劫持案例分析与思考》,用WireShark抓了一下包,本地出去的包TTL=64,正常从京东网站返回的TTL=56,而被劫持后返回的TTL=59,用tracert看了一下,
到 www.jdcdn.com [183.56.147.1] 的路由: 1 <1 毫秒 <1 毫秒 <1 毫秒 2 1 ms 1 ms 2 ms 3 4 ms 3 ms 3 ms 4 8 ms 5 ms 5 ms 5 16 ms 15 ms 15 ms 202.97.66.190 6 20 ms 19 ms 19 ms 113.108.208.194 7 * * * 请求超时。 8 20 ms 20 ms 33 ms 113.108.236.150 9 17 ms 17 ms 17 ms 183.56.147.1 跟踪完成。
问题应该就出在上面的某个地址上,这种劫持比DNS劫持还恶心,防不胜防,缓解的笨办法就是把那些重定向的域名通通在Host文件里定义成127.0.0.1,被重定向的网页就无法访问了,至少不当冤大头给人赚钱吧,但这种方法不是长久之计,网上有人提到一种办法就是通过代理的方法把数据包碎片化,让劫持的没办法一次性获取足够的数据知道你想去哪里,就不好下手劫持了,但是这种方法比较麻烦,我自己想了一个更笨的办法,但是比较好实现,我们知道劫持的即然是只有你访问电商时才下手,说明他有判断,可能跟他的性能有关系,数据量大了他也搞不定或者怕暴露,猜测他不会从IP地址入手,因为现在的分布式技术使得同一个网站不会对应简单的几个IP,那最有可能的就是从HTTP头中获取相关目的地信息,于是手工用Fiddler进行发包试验,先把Host这个HTTP头调整到所有HTTP头的后面,也就是最后一条,然后在HTTP头中插入一个自定义的HTTP头,它的值填充为长度很大的空白值,实验中为4K的空格,这样劫持的想要知道你的确切目的地就要进行大块的数据缓冲,否则Host头信息就无法抓取到,但这样的话他的设备性能能否承载就值得考虑,经实验十几次,这种方式发出的包收到都是正常的网页返回,再也没有被劫持,不知道自己的想法从理论上说对还是不对,在这里贴出希望各位大神们多多指导,如果这个想法可行的话,那唯一的缺点就是会给电商的服务器造成一丁点的额外付出,但是现在的WEB服务器应该能从容应对这种长度的HTTP头吧。实现的话我想可以在Chrome浏览器里通过插件的方式实现,Chrome里好象有一个web request的接口,可以在HTTP包发出前对HTTP头进行修正,用javascript应该能实现这种做法吧。有大神愿意造福大众来一个吗?
各种吐槽:
1#
hkAssassin | 2015-05-14 14:51
顶一个!2楼来回答!
2#
顺子 | 2015-05-14 15:37
我懂个卵哦!!
3#
南哥 | 2015-05-14 19:09
2楼屌爆炸伤三楼!由4楼来回答!
4#
0x12 (帽子掉了|多逛,少说话。|小学生 ) | 2015-05-14 19:50
头部302跳转怎么破
5#
336 | 2015-05-14 19:54
@0x12 我的想法是你只要让他取不到你的目的地,不触发他的劫持条件,他就不会往劫持你的回应包往里塞东西,包括头部302跳转这样的。
6#
MITM | 2015-05-14 22:55
强制用HTTPS啊!
7#
核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2015-05-15 09:29
修改http头的想法不错。