使用 Dnsmasq 绕过上海电信的广告劫持

2015-01-25 01:48:06 +08:00
 aveline

晚上头疼起来买止痛药 ... 然后发现又特么被电信劫持了,不能忍!

但是 HTTP 劫持基本上没办法对付,那就只能从广告页下手了。

分析

广告联盟

根据观察,上海电信访问京东、一号店、淘宝、天猫等,不管劫持到哪个页面,后面均会二次跳转到 click.linktech.cn,那么很好办嘛我把 click.linktech.cn 劫持掉好啦~

例: http://hao.xfect.cn/js/yhd02.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <body>
<script type="text/javascript">
    var dstSrc="http://click.linktech.cn/?m=yihaodian&a=A100200985&l=99999&l_cd1=0&l_cd2=1&tu=http%3A%2F%2Fwww.yhd.com%2F";
    window.top.location=dstSrc;
    </script>
 </body>
</html>

要直接跳回原站就可以这么写:

<script>
window.location.search.split('&').forEach(function (param) {
  param = param.split('=');
  if(param[0] == 'tu') {
    window.top.location.replace(decodeURIComponent(param[1]));
  }
});
</script>

右下角小广告

例: http://tv.sohu.com/

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script defer="" type="text/javascript" src="http://websystem.b0.upaiyun.com/th/sh0101/ver_sh0101_354/th1052.js"></script><script type="text/javascript" src="http://websystem.b0.upaiyun.com/fc/sh0101/js/jquery-1.8.3.min.js"></script><link rel="stylesheet" type="text/css" href="http://websystem.b0.upaiyun.com/fc/sh0101/css/adStyle.css"><title>搜狐视频-搜狐</title></head><body style="margin: 0px; overflow: hidden; zoom: 1;"><div class="ad-dialog ad_ style0" id="ad_id" style="right: 20px; bottom: 2px; display: block;"><div class="title tt_" style="display: none; width: 160px;">这是广告</div><div class="close"><a class="icon-close close_"><span id="cl"><font color="white">关闭</font></span></a></div><div class="repeate"><a id="repeate" class="repeate_"><span id="re"><font color="white">重播</font></span></a></div><div class="content ct_"><iframe scrolling="no" frameborder="no" src="http://a.letter.com.cn/suzhouad/ad9.html?_us=&amp;_su=aHR0cDovL3R2LnNvaHUuY29tLw==" allowtransparency="true" id="adframe" style="top: 0px; width: 160px; height: 0px; display: none; opacity: 1;"></iframe><iframe scrolling="no" frameborder="no" src="http://a.letter.com.cn/suzhouad/ad10.html" allowtransparency="true" id="adframe1" style="top: 528px; width: 160px; height: 150px;"></iframe></div></div><iframe id="imain" src="http://tv.sohu.com/" scrolling="auto" width="100%" height="100%" frameborder="no" onload="" style="position:fixed;"></iframe><style class="ublock-postload-1ae7a5f130fc79b4fdb8a4272d9426b5">#adframe:not(frameset)
{display:none !important;}</style></body></html>

这边由于 CORS 的原因不能直接获得 parent 的 URL,不过我们可以用 referrer 获取,很简单,改写成这样子就可以了:

<script>
parent.location.replace(document.referrer);
</script>

方法

嗯方法很简单啦,就是在本地的 dnsmasq 里插入这么几条配置:

address=/click.linktech.cn/10.21.0.53
address=/cdn.shdsp.net/10.21.0.53
address=/a.letter.com.cn/10.21.0.53

其中的 10.21.0.53 是我内网 Linux 服务器的 IP 地址,上面需要安装一下 nginx 或者其他你喜欢的 Web server。

以 nginx 为例,新增配置文件 /etc/nginx/sites-available/hijack.conf

server {
  server_name a.letter.com.cn cdn.shdsp.net 58.215.179.159;
  root /var/www/anti-hijack;
  index dsp.html;
  location / {
    try_files $uri $uri/ /dsp.html$is_args$args;
  }
}

server {
  server_name click.linktech.cn;
  root /var/www/anti-hijack;
  index linktech.html;
  location / {
    try_files $uri $uri/ /linktech.html$is_args$args;
  }
}

然后重载配置

ln -s /etc/nginx/sites-available/hijack.conf /etc/nginx/sites-enabled/hijack.conf
nginx -s reload

嗯,能不看那些讨厌的广告和推广链接了。
另外如果本地没有 Web 服务器可以使用我的 173.234.150.185,不过由于要走公网谁知道电信会不会再来劫持一遍 ...

另外如果本地也没有 DNS 的话可以用我的 180.153.42.157180.153.47.32,不过 ... 我也不能保证我的 DNS 结果不会被二次劫持,电信的节操呵呵呵

以及投诉什么的我也试过了,工信部表示不受理,电信表示不是他们的 IP 不能屏蔽。
不过鬼才信。

11938 次点击
所在节点    宽带症候群
39 条回复
mongodb
2015-01-25 01:51:10 +08:00
这方法虽然能治理。。但仍然觉得不爽。。
这帮王八蛋用这方法,虽然严格来说我也没多大损失什么的(他们的frame页面所在的机器倒是可能太卡以至于我网站打开都卡),但仍然觉得不舒服。。
我甚至可以接受他们事先明说了。。但这种当我是sb利用我的流量谋利仍然让我十分十分十分十分不高兴。
求反制。
Dreista
2015-01-25 02:40:24 +08:00
电信一劫持我就忍不住想要D…
esile
2015-01-25 02:54:42 +08:00
@aveline 刚发完就发现lz了
/t/165183
Do
2015-01-25 03:09:53 +08:00
不知道有没有可能是有人利用电信的服务器干这种事情。干这勾当的当然不是网站的ip,啥叫不是他们IP他们不管,电信这是主动抗投么〜=_=。

国内的ISP乃典型流氓无赖。
aveline
2015-01-25 03:22:22 +08:00
@Do 就是投放广告用的 IP 不是上海电信的,以及广告内容也不是直接和电信有关的。
aveline
2015-01-25 03:35:49 +08:00
电信这学的也太快了吧还是我之前没发现 ... 有直接跳的了

<iframe id="i" src="http://www.baidu.com/?tn=95901816_hao_pg" scrolling="auto" width="100%" height="100%" frameborder="no" onload="" style="position:fixed;"></iframe>
lm902
2015-01-25 06:47:48 +08:00
能用HTTPS的例如https://www.baidu.com直连 其它的挂国内SS 阿里云应该没有劫持
usbaby
2015-01-25 06:58:49 +08:00
遇到的情况和你一样,工信部不管这个么?
rwzsycwan
2015-01-25 07:06:43 +08:00
20140930
2015-01-25 07:26:56 +08:00
一号店的佣金最高吧,我这里不管移动还是电信都有很高的几率劫持一号店
ajan
2015-01-25 09:40:00 +08:00
@aveline 上海电信 打开百度加 ?tn=****** 尾巴事情忍了很久了, 可以使用https://www.baidu.com
Chrome 可以打开 chrome://net-internals/#hsts 添加 baidu.com 保存, 以后可以自动切换到https 上了
liceven
2015-01-25 10:00:07 +08:00
@ajan 广东启用https都没有用 有时候点连接还是会跳到 ?tn=******
402645707
2015-01-25 10:21:21 +08:00
有这么麻烦吗,抓icmp包屏蔽发劫持包的ip
zro
2015-01-25 11:41:00 +08:00
不知道有没有方法可以这样,劫持一次就DDOS一次/多次它?XD
Elethom
2015-01-25 11:50:21 +08:00
除了在工信部投訴電信還需要在哪裡投訴一次工信部來著, 忘記是哪裏了. 兩個連著投訴就可以了, 原因寫 "不予受理, 態度蠻橫惡劣".
Do
2015-01-25 12:13:49 +08:00
@aveline 发现现在上海电信劫持的话与时俱进了,src 和ttl都伪造了。
guoyijun163
2015-01-25 21:19:23 +08:00
上海电信的劫持包你可以用iptables的u32模块……屏蔽HTTP响应中日期为20XX年的包……(这是特征)

另:工信部投诉是有用的,电信没回访,但是实际是去掉了
guoyijun163
2015-01-25 21:20:26 +08:00
@Do 但是HTTP响应包中的年份是不合理的……可以以这个屏蔽重定向
hyraxer
2015-01-26 03:20:02 +08:00
楼主好思路 我打算在路由器中专门反劫持一下
Do
2015-01-26 10:42:05 +08:00
@guoyijun163 你那里现在没这个现象了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/165182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX