https://www.sojson.com
被劫持了。开始没发现,个别地区用户发现打开sojson.com
或者从百度搜索 sojson
的关键词进入的时候,就跳转到了搜狗。
下面来看看一个跳转的图:
另外看看视频吧:
感谢 @甘肃|Java|逝月
提供的视频。
我们可以看到,点击一个页面到了搜狗,并且 搜索的关键词是“json”。
抓包看了一下头信息:
第一次请求www.sojson.com
:
Request URL: https://www.sojson.com/
Request Method: GET
Status Code: 200 (from disk cache)
Remote Address: 123.132.254.145:443
Referrer Policy: no-referrer-when-downgrade
age: 1077
cache-control: max-age=7200
content-encoding: br
content-type: text/html
date: Fri, 13 Apr 2018 07:48:32 GMT
expires: Fri, 13 Apr 2018 09:30:35 GMT
server: marco/2.0
status: 200
vary: Accept-Encoding
via: S.mix-sd-dst-036, T.43.H, V.mix-sd-dst-040, T.139.H, M.cun-sd-lyi1-139
x-request-id: 64e8891e3fafd7c83206d4f897b4ddbb; fc4ef7cb4b954412c8a0710df20d9ab5
x-source: C/200
Provisional headers are shown
Upgrade-Insecure-Requests: 1
User-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=json
Request Method: GET
Status Code: 200 OK
Remote Address: 113.10.139.224:80
Referrer Policy: no-referrer-when-downgrade
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Fri, 13 Apr 2018 08:04:25 GMT
Pragma: no-cache
Server: nginx/1.0.15
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Powered-By: PHP/5.2.17p1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Host: adg.payud.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
flag: 0
kw: json
第三次跳转(www.sogou.com)
Request URL: https://www.sogou.com/sogou?pid=sogou-site-9cd013fe250ebffc&ie=utf-8&query=json
Request Method: GET
Status Code: 200 OK
Remote Address: 58.250.125.49:443
Referrer Policy: unsafe-url
Cache-Control: max-age=0
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Fri, 13 Apr 2018 08:04:25 GMT
Expires: Fri, 13 Apr 2018 08:04:25 GMT
Server: nginx
set-cookie: black_passportid=1; domain=.sogou.com; path=/; expires=Thu, 01-Dec-1994 16:00:00 GMT
set-cookie: ld=Klllllllll2z1pRylllllVryBw6lllll0GMO1kllll1lllllRylll5@@@@@@@@@@; path=/; expires=Sun, 13 May 2018 08:04:25 GMT; domain=.sogou.com
Transfer-Encoding: chunked
Vary: Accept-Encoding
x_ad_pagesize: adpagesize=7622
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: ABTEST=0|1523605712|v17; SNUID=E493F8BB36335F812E71720F37BF314B; SUID=D2A5CF8C4F18910A000000005AD060D0; browerV=3; osV=1; SUV=000D53928CCFA5D25AD060D1BAD50261; IPLOC=CN3100; ld=vZllllllll2z1pRylllllVryYMylllll0GMO1kllllZlllllRylll5@@@@@@@@@@
Host: www.sogou.com
Referer: http://adg.payud.com/sogou_pc.php?flag=0&kw=json
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
pid: sogou-site-9cd013fe250ebffc
ie: utf-8
query: 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 默认缓存起来,这样的话,就可能会扩大您的影响范围了,所以在一定程度上是有作用的。
目前我们这边也是缺少 直接的劫持证据,您也可以后续再观察一下,有复现可以随时联系我们,我们肯定会帮您强力的反馈给网络运营商,要求停止劫持行为。