导读 | 日常遇到的劫持一般为DNS劫持,可在路由器里强制指定公共DNS解决。本文记录了自己家用宽带HTTP劫持的发现过程。相比DNS劫持,HTTP劫持则更为流氓,解决起来也比较棘手。 |
近来在家上网时,iPhone Safari网页里经常弹出“在手机淘宝中打开连接吗?”的提示框,如下图:
作为一名iOS码农,很自然的知道这是网页在调用淘宝app的 URL Scheme tbopen:// ,这是干什么的呢?当然是淘宝客的推广链接,点了之后打开淘宝去领券,如果你按提示下单了,推广者就能拿到返利。问题在于,网页为什么会发出这种请求,结合当前网站是http的,隐隐觉得可能是被劫持了。下面记录一下排查过程。
先说一下环境,家里宽带是联通百兆,路由器华硕AC86U,刷的梅林(仅开启虚拟内存插件),路由器直接拨号,且当时安装条件限制,家里没有光猫,接线员直接接到了一楼的交换机上。
在Wi-Fi下,每次用Safari隐身模式反复访问截图里这个网站,仍会出现这个提示,概率大概30%-40%。切换手机联通4G网络,移动4G,则一次都不会出现。换用电脑Safari和Chrome,也一次不会出现。
结论:仅在iPhone手机端Wi-Fi环境才会出现
翻箱倒柜找出了以前买的 TPLink-WR700n,就是下图这个小路由器(简直是神器,小巧玲珑,AP和Router模式任意切换),设置好拨号账号密码后换掉华硕继续测试,震惊了,劫持弹窗仍然存在。
结论:梅林没问题,只能是运营商的锅了。
由于梅林里已经设置DNS为114,排除了DNS劫持。确定是运营商的接入点的问题,接下来就是看看它究竟是怎么劫持的。这里使用Charles抓包iPhone(还没必要祭出Wireshark大杀器)具体设置不在这里讲了,在百度里随机访问网页,待出现劫持时,停止记录,开始分析记录日志。从后往前,找出返回数据里包含 tbopen 的请求。不出意外,很容易就发现了:
原请求为 //static.geetest.com/static/js/fullpage.8.9.3.js ,经过确认, //www.geetest.com/ 极验,是业界提供安全与风控解决方案的平台,不可能返回 tbopen 这样的数据的。在Charles里复制此http请求的curl出来,使用阿里云VPS里进行访问,获取到的则为真实的JS内容。
curl -H 'Host: static.geetest.com' -H 'Accept: */*' -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1' -H 'Accept-Language: zh-cn' -H 'Referer:' --compressed ''
使用自己的Mac重放这个curl,还是有很高几率被劫持。进一步,修改此请求的User-Agent字段,去掉手机标识符,仅保留为Safari,继续重放,则不会出现被劫持。同时,注意到发生劫持后,有个新的同样的js请求发出,url里多了个参数utm_id=1024001,会返回正确的JS内容,这样做的目的,猜测可能是为了区分请求,好让真正的JS能正常返回不影响网页加载,否则可能出现劫持后再被劫持,无法加载出正确的JS内容。
至此,整个劫持的过程大致清晰了:联通的接入点会根据UA过滤出移动设备中的http JS请求,然后一定几率返回劫持后的伪JS内容,在里面嵌入淘宝客推广链接。
劫持的JS内容如下,里面有淘宝客推广链接,建议阿里妈妈的相关人士解决一下?
代码比较简单,将自己的JS挂载到页面DOM上,使用setInterval延迟20ms去调用tbopen,打开淘宝app领券。
想在手机端暂时屏蔽的话,可以在surge里加个Header Rewrite规则修改UA
[Header Rewrite] ^//* header-replace User-Agent Safari/530
最后的最后,站长们还没上https的赶快上吧。
原文来自:
本文地址://q13zd.cn/http-hijack.html编辑:向云艳,审核员:逄增宝
Linux命令大全:
Linux系统大全: