利用 ARP 攻击劫持流量并抓包分析 SSR 免流包

本文仅是技术研究,不介绍 SSR 免流方法和过程。而是通过这个分析了解其实现原理。

写这篇文章是因为最近花了点时间玩这个东西,觉得挺有意思的,所以想小结一下,文章内容比较简短~

我们不妨先抓包看下,经过 SSR 混淆的报文变成啥样子了。

既然我们要抓手机的包,常规做法是电脑配置 HTTP 代理,更改手机 WIFI 代理设置就好了。但是我觉得这样太麻烦,还得拿手机这操作那操作的。。。

我还是习惯简单粗暴的,利用 ARP 直接劫持手机包。当然这个前提是手机和电脑在同一个局域网内。

在 Arch Linux / Manjaro 中,需要先安装这个包:

yaourt -S dsniff

Dsniff 是一个著名的网络嗅探工具包,包含了很多实用的东西,我们只需要利用到他的 arpspoof。

其实我前面有一片博客已经介绍过怎么进行 ARP 攻击了,点击查看,不过重新说下好了~

首先我们还得开启本机的 IPv4 流量转发,有两种方式:

  1. 临时开启

    echo 1 >> /proc/sys/net/ipv4/ip_forward
    

    这个只是对当前会话有效。

  2. 永久开启

    # vim /etc/sysctl.d/30-ipforward.conf
    net.ipv4.ip_forward=1
    

这只是准备工作,当然如果上面都曾经操作过就不需要再进行了。

接下来是正文。首先查看需要抓包的设备的 IP 地址,例如我的是 192.168.1.103。我的网关是 192.168.1.0。本机地址是 192.168.1.147

然后两条命令搞定:

arpspoof -i wlp3s0 -t 192.168.1.103 192.168.1.1
arpspoof -i wlp3s0 -t 192.168.1.1 192.168.1.103

第一条告诉 192.168.1.103 我是网关(192.168.1.147),第二个告诉真实网关(192.168.1.1)我是 192.168.1.104

抓包查看,我这里用的是 Wireshark。

wireshark

这里的 HTTP 报文,可以看到 Host 是 mims.icbc.com.cn,然而,这并不是我真实访问的网站,而且这个包的 Target IP 也不是这个 Host 的 IP 地址。

这里就是 SSR 的 HTTP 混淆功能了。在 SSR 中,我配置的混淆协议是 http_simple

http_simple:简易伪装为http get请求,参数为要伪装的域名,如cloudfront.com。客户端上支持用逗号分隔多个域名如a.com,b.net,c.org,连接时会随机使用其中之一。不填写参数时,会使用此节点配置的服务器地址作为参数。

所以其实这些 HTTP 请求大多数并不是真实的 HTTP 访问,而是经过 SSR 混淆而成的 HTTP 报文,在 SSR 的服务器中,会解析后重新发往正确的目的地。

而我们知道有一些访问,比如访问联通营业厅,其实本身就是免流的,运营商有一个白名单会把免流服务的网址加到里面,如果检测用户访问的是白名单中的网址那么就不会扣费。检测的方法当让就是根据 HTTP 报文的请求头。

而我现在所使用的这个 Host 就是白名单里面的一个,这下你知道为什么上面这个包是免流包了吧?

但是现在运营商检测报文头部,可能还会检测其访问端口之类的,所以最好是使用常用端口,我的直接用的 80 端口,据说 8080,443 也 OK,没有尝试。

如果 Host 失效了,按照上面的方法抓包,访问免流服务拿到对应的 Host 就好了。

由于自己平时经常会开着 SSR,所以多加个混淆参数和混淆方法,就可以实现部分流量(之所以说部分,是因为我平时不开全局)免流。当然免流不是目的,只是顺带的 -.-。