CDN和DNS劫持网络跳转,排查及解决经验分享
https://www.sojson.com 被劫持了。开始没发现,个别地区用户发现打开sojson.com或者从百度搜索 sojson 的关键词进入的时候,就跳转到了搜狗。
下面来看看一个跳转的图:

另外看看视频吧:
感谢 @甘肃|Java|逝月  提供的视频。
我们可以看到,点击一个页面到了搜狗,并且 搜索的关键词是“json”。
抓包看了一下头信息:
第一次请求www.sojson.com:
Request URL: https://www.sojson.com/Request Method: GETStatus Code: 200 (from disk cache)Remote Address: 123.132.254.145:443Referrer Policy: no-referrer-when-downgradeage: 1077cache-control: max-age=7200content-encoding: brcontent-type: text/htmldate: Fri, 13 Apr 2018 07:48:32 GMTexpires: Fri, 13 Apr 2018 09:30:35 GMTserver: marco/2.0status: 200vary: Accept-Encodingvia: S.mix-sd-dst-036, T.43.H, V.mix-sd-dst-040, T.139.H, M.cun-sd-lyi1-139x-request-id: 64e8891e3fafd7c83206d4f897b4ddbb; fc4ef7cb4b954412c8a0710df20d9ab5x-source: C/200Provisional headers are shownUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
第二次跳转到了(adg.payud.com):
Request URL: http://adg.payud.com/sogou_pc.php?flag=0&kw=jsonRequest Method: GETStatus Code: 200 OKRemote Address: 113.10.139.224:80Referrer Policy: no-referrer-when-downgradeConnection: keep-aliveContent-Encoding: gzipContent-Type: text/htmlDate: Fri, 13 Apr 2018 08:04:25 GMTPragma: no-cacheServer: nginx/1.0.15Transfer-Encoding: chunkedVary: Accept-EncodingX-Powered-By: PHP/5.2.17p1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveHost: adg.payud.comUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36flag: 0kw: json
第三次跳转(www.sogou.com)
Request URL: https://www.sogou.com/sogou?pid=sogou-site-9cd013fe250ebffc&ie=utf-8&query=jsonRequest Method: GETStatus Code: 200 OKRemote Address: 58.250.125.49:443Referrer Policy: unsafe-urlCache-Control: max-age=0Connection: keep-aliveContent-Encoding: gzipContent-Type: text/html; charset=utf-8Date: Fri, 13 Apr 2018 08:04:25 GMTExpires: Fri, 13 Apr 2018 08:04:25 GMTServer: nginxset-cookie: black_passportid=1; domain=.sogou.com; path=/; expires=Thu, 01-Dec-1994 16:00:00 GMTset-cookie: ld=Klllllllll2z1pRylllllVryBw6lllll0GMO1kllll1lllllRylll5@@@@@@@@@@; path=/; expires=Sun, 13 May 2018 08:04:25 GMT; domain=.sogou.comTransfer-Encoding: chunkedVary: Accept-Encodingx_ad_pagesize: adpagesize=7622Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveCookie: ABTEST=0|1523605712|v17; SNUID=E493F8BB36335F812E71720F37BF314B; SUID=D2A5CF8C4F18910A000000005AD060D0; browerV=3; osV=1; SUV=000D53928CCFA5D25AD060D1BAD50261; IPLOC=CN3100; ld=vZllllllll2z1pRylllllVryYMylllll0GMO1kllllZlllllRylll5@@@@@@@@@@Host: www.sogou.comReferer: http://adg.payud.com/sogou_pc.php?flag=0&kw=jsonUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36pid: sogou-site-9cd013fe250ebffcie: utf-8query: json
通过CDN 获取CDN缓存的内容是以下内容:

仔细看吧,应该能看明白,就是返回的就是一个 js ,并且直接刷新到上面第二个网址,然后跳转到搜狗了。
过程就是这么简单,这个就确定了,100%是被劫持了。但是不一定是 DNS劫持 。
答疑:
1.有的人看到这里就会问了,不是 HTTPS 会解决劫持吗?sojson 不是HTTPS的站点吗?那为什么?
这个问题问的漂亮,我来回答一下:首先  HTTPS  是防止嵌入  JS   方式的劫持,就是你请求一个页面,  DNS  恶心的厂商会加一段js放里面,会出现广告之类的,一般出现在移动端,PC端少,但是博客园就出现过一次。这种一般是  https  就可以解决。
2.那这种是什么劫持?
这种就是直接做的域名劫持,就是把你域名直接拦截,直接返回他的内容,然后就是上面图的恶心内容了。这种 https 没有用。
3.怎么解决?
首先告诉你,基本无解,只是这种太恶心了。你只能发律师函给网络运营商。好多是网络运营商和 CDN 厂商相互勾结,因为这个利益链很大。
感谢群里的热心网友:@北京|java|lsp @杭州|java|Mr.周 @广东|Java|哈喽 @上海|Java|Ever @甘肃|Java|逝月 @上海|Java|ETFOX 等等,感谢你们帮我一起排查问题。
DNS劫持的几种示意图
1、DNS域名拦截方式

2、DNS增加脚本方式

3、CDN + 网络运营商混合方式(今天SOJSON遇到的就是这种)

这样 CDN 直接缓存的就是劫持的脚本。
这个就是没办法,下面看看CDN厂商的回复:
您好,肯定不是我们和网络服务商一起搞的,您出现这样的问题,某种程度上说我们CDN 也是受害者。况且我们没有理由把您劫持到 sogou 而不是有利我们的其他一些网站。您目前出现的劫持类型应该数属于DNS层劫持,所以https方案 应该是不能解决您的问题的。
刚才希望您配置的是有一点作用的,如果劫持返回了是content-type是 静态文件的话,会被我们CDN 默认缓存起来,这样的话,就可能会扩大您的影响范围了,所以在一定程度上是有作用的。
目前我们这边也是缺少 直接的劫持证据,您也可以后续再观察一下,有复现可以随时联系我们,我们肯定会帮您强力的反馈给网络运营商,要求停止劫持行为。







