记一次Http劫持分析

记一次Http劫持分析

2022-06-12更新

经过一段时间的观察,发现这个广告是本站使用的来必力评论控件引入的。解决方法就是在来必力的控件代码DIV块中加上<style>#taboola-livere { display: none;}</style>,通过这样的方式来隐藏来比力评论控件的广告。


原文

最近在家用手机访问我自己的博客的时候,无论我用什么手机浏览器总是会在第一次加载页面的时候,在页面上加载了各种奇怪的广告,我顿时觉得很疑惑,我什么时候在网站上放广告了?我是失忆了,还是我喝醉了?
劫持效果

看着这满屏的广告瞬间觉得很厌恶,本身很干净的网页像被贴了膏药一样的恶心,而且这些广告就像老鼠一般,一会有一会没有,神出鬼没。一看就是那些见不得光的人做出来的见不得光的事。愤怒过后,静下心来仔细分析了下,得出了一个结论: 我可能是被Http劫持了

Http劫持

HTTP劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并在使用者界面展示宣传性广告或者直接显示某网站的内容。以上内容来自百度百科,通俗点说就是HTTP劫持就像是你开车去目的地的时候,半路经过了个过路站,有人开了你车门上车给你塞小广告,你带着小广告去了目的地。没错,我给别人当了免费顺风车司机。

谁在劫持我?

那到底是谁在给我塞小广告呢? 到这个时候我心中已经有三个怀疑对象:

  • 百度云加速
  • 小米路由器
  • 电信宽带运营商

首先是百度云加速,为什么会想到他呢,因为这个网站在发生劫持的时候,用的正是百度云加速的DNS,理论上讲他有机会截取并修改我的Http内容。但我觉得他使坏的可能性不大,网上搜索的结果显示不出任何百度云加速会进行劫持的迹象,没有先例,虽然广告内容是百度百意的,但我觉得他应该只是个内容服务提供商,不会也没必要作恶做的那么明显,所以暂时先排除这一个可能。
剩下的就是路由器和运营商,这两个家伙都有很大可能进行Http劫持的,经过网上的搜索发现他们以前的所作所为,可谓劣迹斑斑。谷歌百度一搜一大片,小米15年的时候有个著名的404Http劫持事件,电信运营商的劣迹更是数不胜数,具体是谁看样子还得继续分析下去才能知道。

代码分析

通过Safari的代码分析得知,在网页的最下面,莫名其妙的被插入了iframe节点。这就是Http劫持做的好事!
劫持分析
从代码中可以得知,可能是由百度提供了内容(cpu.baidu.com),这个叫做zmeng的公司编写了插入的js。最后由路由器或者运营商执行了Http劫持,插入了代码。
劫持分析
谷歌了一下这个cpu.baidu.com和zmeng(可能是众盟),并没有得到什么特别有价值的信息。于是向下个网址入手。http://x.hao61.net/frqctrl.html
劫持分析
从上面的图可以看出来这个iframe是由zm.js:2029初始化而来的,而这个zm.js是哪里来的呢?
劫持分析
这个zm.js是从http://js.union-wifi.com/zm.js加载来的,这个看起来很像联通wifi的网址(并不是2333),谷歌了一下发现又是个什么联盟的,没什么具体的信息,不过已经有人反映这个网址出现在别的网站Http劫持中,看起来有人和我同命相连了,遗憾的是他并没有具体的解决方法,我们只好继续往下看。
劫持分析
最终我们追溯到源头了(并没有2333)。这个http://a.liuzhi520.com下面的rt_adjs_common.php是一切js加载的源头,是初始化广告加载js的网址,同样谷歌之后没有有用的信息,线索到这里就断了。

解决办法以及总结

分析了一通,其实我并没有找到真正的源头,由于手上没有别的路由器(懒),所以没有将小米路由器替换掉进行测试,但刚才谷歌a.liuzhi520.com的时候发现有人和我有一样的问题,这篇文章讲述了他是怎么分析Http劫持的,至此我的分析更倾向于电信运营商在作怪。既然源头这么难找,那解决办法呢?解决办法还是有的!Http协议是明文传输的,本身的特点导致了他非常容易被劫持,最终,我将自己的网站改成全站强制Https访问,并且在家里路由中,将加载脚本的网址屏蔽。至此,这次Http劫持事件算是告一段落,但要根本的解决问题,我想还是要从运营商这个源头去处理这件事。在调查这次事件过程中,让我清楚的意识到Http网站是多么不安全以及容易被劫持,插小广告劫持还算好,万一劫持者插了一段JS,获取你当前在页面上输入的账户密码,理论上讲也是轻而易举的。总之如果各位以后遇到Http的页面,不管是开发还是普通的访问,都尽可能小心点吧。