1
kttde 2016-08-08 16:44:19 +08:00 1
可以从 ttl 值这方面入手
|
3
kttde 2016-08-08 17:07:57 +08:00 1
jd 解析的 IP 地址是 117.131.205.1,那么这个 ip 发给你的第 1 个包的 ttl 值就是真的,Wireshark 序号 5,7,10,11,13 中,5 是最先发的 ttl 值是 51,10 和 11 的 ttl 值都是 74,13 序号往后走的 ttl 值都是 51,那么序号 10 和 11 就是假包,屏蔽 117.131.205.1 发过来的数据包 ttl 值是 74 的就可以了
|
4
gamexg 2016-08-08 17:24:39 +08:00 1
|
7
KCheshireCat 2016-08-08 21:09:36 +08:00 2
这个劫持设备发了两个包,两个例子抢答包 ttl 分别是 73,74
一个是 ACK 标志位的并没有携带数据的纯确认包,作用是确认收到了客户端 GET 请求 然后还有一个就是抢答包了,他的标记位是 PSH,ACK.这个包其实已经包含了前面那个包的功能 这个包没有标记 FIN,而 PSH 在 TCP 里常用,不能成为明显的特征 看 IP 头和 TCP 头也没有什么畸形构造,TTL 是个特征但不安定,应该放在最后考虑 这里其实可以思考 IP 头,TCP 头容易成为特征是因为有规范,定长 而劫持设备发送的劫持包通常是预先设置好模板然后填入不同变量,所以可以看作是定长的头部 红框内就是预计可以匹配的部分,让我选的话我会考虑匹配 Set-Cookie: apxlp=1; 然后我们看看抢答的正文 绿色的是设置初始变量, 红色是修改原有 cookie 的到期时间为 1970 年 1 月 1 日零点+1s,而 UNIX 认为 1970 年 1 月 1 日 0 点是时间纪元,并越过了 apxlp=1 这条没有处理 蓝色就是执行跳转的部分了使用 meta 节点做立即跳转,然后对 apple 设备做了特殊对待 使用 Set-Cookie: apxlp=1;作为关键词匹配 匹配成功 对应的 iptables 规则 iptables -A FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 "130=0x5365742d&&134=0x436f6f6b&&138=0x69653a20&&142=0x6170786c&&146=0x703d313b" -j DROP 最后是关于 TTL 的 目前现代系统常见的初始 TTL 值一般是 64,128,256 这 3 种 观察握手时 TTL 可以发现两方到达 TTL 都小于 64,推测初始 TTL 为 64 而劫持包的 TTL 为 73 左右,初始 TTL 不可能是 64 那么要用 TTL 作为特征过滤可以参考这样 iptables -A FORWARD -s 117.78.34.197 -p tcp -m tcp --sport 80 -m ttl --ttl-gt 70 -m ttl --ttl-lt 80 -j DROP iptables -A FORWARD -s 117.131.205.1 -p tcp -m tcp --sport 80 -m ttl --ttl-gt 70 -m ttl --ttl-lt 80 -j DROP 然而如果服务器使用了 CDN 那么 IP 很可能会变动,但不限制来源 IP,很可能会误伤 以上规则均未做验证,不保证有效 |
8
bdbai 2016-08-08 21:38:09 +08:00 via Android
为什么不直接投诉运营商呢。变着法子治标不治本啊。
|
9
mdzz 2016-08-08 21:44:26 +08:00
向广告商投诉试试
|
11
Peanut666 OP @KCheshireCat 感谢分析,我回头试试!!
|
16
falcon05 2016-08-09 06:40:49 +08:00 via iPhone
我也是被联通劫持了, http 请求会在 body 结尾加段广告 js, 还好特征比较简单,用 iptables 配合 privoxy 过滤掉了
|
17
songw123 2016-08-09 09:39:42 +08:00
我在广东电信网内,也遇到京东之类被劫持到领克特或者亿起发的情况,测试了非常多的办法,最后选择了直接 DNS 切到阿里公共 DNS , 223.5.5.5 ,只有他们家的公共 DNS 没有被污染,其他家的都被污染,不清楚你那边情况如何,供参考
|
18
Peanut666 OP @songw123 我试过各种 DNS 了,但这种不是 DNS 劫持哟,比 DNS 劫持还难搞的 HTTP 劫持。
|
19
kttde 2016-08-09 21:43:27 +08:00 1
ttl 过滤
然而如果服务器使用了 CDN 那么 IP 很可能会变动,但不限制来源 IP,很可能会误伤 这一点比较好解决,直接指定 hosts 域名 ip ,电商网站最多 20 到 30 个,一般只劫持首页 |
21
CloudnuY 2016-08-31 17:12:26 +08:00
@KCheshireCat 多谢,学习了,之前用 wireshark 拦截到抢答包,和请求包的 ID 是一样样的,真实的数据包会被丢弃。 TTL 测的多次多日都是 146 ,用 scapy 从 ttl=1 往上游发包不管是多少都没有链路劫持服务器的响应,劫持的广告服务器 IP 变动极大,各种云服务器都有。
这种情况可否直不限制 IP 直接 drop 掉所有 ttl=146 的包呢? |
22
KCheshireCat 2016-08-31 22:18:22 +08:00
@CloudnuY
就 146 来说真的没有其他特征了可以这么尝试,因为常见的 TTL 初始值比 146 大的也就 256 了, 而通常不会有这么多跳路由来把 256 减到 146. 并且 256 也是 64,128,256 这 3 者里面比较不常见的. |
23
CloudnuY 2016-09-02 01:05:30 +08:00
@KCheshireCat 多谢回复!这几天我试一下直接 drop 这个看看效果
|