前言:网络课需要完成一个抓包的实验,了解到Fiddler可以抓取HTTP和HTTPS协议(或者Charles),Wireshark可以抓取TCP/DNS等协议,除此之外还用到了Kali进行ARP欺骗,对电脑端和iOS端(利用rvictl工具)进行抓包。下面是遇到的问题和一些总结。

抓包前,需要先了解下OSI与TCP/IP模型

1. 工具介绍

1.1 Fiddler

该软件可以实现对PC端或手机端中HTTP/HTTPS的流量抓取,需要进行一定配置

Fiddler配置参考:

https://blog.csdn.net/weixin_40608713/article/details/114873070

然后在iPhone上访问网页,Fiddler软件就可以抓取到HTTP/HTTPS流量了。

如果获取到的Web视图有乱码,需要win+r,输入regedit进入注册表,然后访问:HKEY_CURRENT_USER\Software\Microsoft\Fiddler2,在这里添加字符串值,键名为HeaderEncoding 键值为GBK

最后,配置规则以显示对应的服务器IP地址。

Fiddler中显示Server IP方法参考:

https://blog.csdn.net/qq_41571369/article/details/125433001

案例:抓取微信游览器中的内容

有些链接只能用微信客户端打开,微信登录并进行相应授权后才能进入到页面。因此用电脑游览器打开是进入不了的,抓取不到HTML具体内容。这个时候就体现出用Fiddler抓包的好处了。

下面是使用iPhone通过微信访问某个链接,使用Fiddler抓取到的内容,可以看到HTTPS已经被解密。

Fiddler界面

1.2 Charles

功能和Fiddler很接近,区别在于Charles还支持SOCKS5代理和监听Socket(目前只用到了这两个区别)。

推荐Mac电脑使用,因为破解版比较好找。

Charles注册码生成

https://www.zzzmode.com/mytools/charles/

Registered Name: 515code.com
License Key: bb653130968de40237

Charles抓包参考

https://www.51cto.com/article/593915.html

1.3 Wireshark

相比前两个只能抓应用层协议的抓包工具,Wireshark支持抓TCP/UDP等更底层的协议。

对电脑端抓包也很简单,安装好后选择对应的网卡接口就能看到流量包。

先开启IP地址解析成对应域名,在Wireshark的首选项中找到Name Resolution,勾选Resolve network(IP) addresses,或者根据需求勾选其他转换选项。

接下来使用过滤器即可筛选出想要的数据包,下面是一些规则例子。

指定TCP协议,IP收/发地址为105.75.58.18,端口7000且包长度大于0

tcp and ip.addr==105.75.58.18 and tcp.port==7000 and tcp.len > 0

查找DNS解析包含baidu的域名

dns.qry.name contains baidu

1.4 Kali(ARP欺骗)

在Apple Silicon的Mac上推荐使用VMware虚拟机,因为Parallels对Linux的支持并不是很好

VMware for M1下载链接

https://customerconnect.vmware.com/cn/downloads/get-download?downloadGroup=FUS-PUBTP-22H2

下载Apple Silicon版本的Kali镜像,然后使用PD虚拟机安装。

安装Kali教程参考

https://blog.csdn.net/Bluffing/article/details/114821845

在Kali上安装Parallels Tools(实测安装不上,不建议使用PD)

安装Parallels Tools参考

https://www.jianshu.com/p/2c06e37dc07b

建议安装GNOME桌面:

1
sudo apt -y install kali-desktop-gnome

安装arpspoof:

1
sudo apt-get install -y dsniff ssldump

使用arpspoof进行欺骗:

1
sudo arpspoof -i eth0 -t 172.16.60.230 -r 172.16.255.254

流量转发:

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

经过实测,以Windows10为攻击的目标机器,能够抓取到大部分TCP/TLS/DNS等流量,但是不知道为什么很多网站加载很慢,图片几乎无法加载,不清楚是不是流量转发的问题。

下面这张图片是抓到了PING百度和网易云的部分流量。

ARP欺骗抓包测试

下面两步是在网络上找的方法,实测只能抓到虚拟机自己的,无法抓到攻击目标。

图片监听(对HTTPS可能无效):

1
sudo driftnet -i eth0

访问网站监听:

1
sudo urlsnarf -i eth0

1.5 Nmap

使用Nmap可以扫描局域网中的主机,例如:

1
2
nmap -sP -PI -PT 172.16.57.0/24
# 或者在kail中使用 fping -g 172.16.57.0/24

扫描完后可以通过arp查看缓存表

如果需要清空,在Mac上执行下列命令

1
sudo arp -ad

2. iOS端抓包

相比电脑端,抓取手机端流量难度会比较大。

第一种方案:使用Charles + Wireshark

这个方案会出现一个问题:当我们打开一个游戏的时候(例如原神),Wireshark抓取电脑端的原神有大量的UDP包,但对iOS端的原神几乎抓不到UDP包。即使在小火箭打开了UDP转发,Charles开启SOCKS代理,但是不知道是Charles的问题还是UDP转发端口没开放的问题,依然无法捕捉UDP流量。

  1. 要求:电脑和手机要连在同一个局域网下,并且能相互PING通

  2. 使用Fiddler打开HTTP代理,在手机端的WIFI设置代理(HTTP代理);或者用Charles打开SOCKS5代理,在手机端要使用支持的代理软件(例如小火箭)

  3. 给手机安装HTTPS证书

  4. 手机上访问HTTPS页面,软件中可以看到相应的流量,并且能解密内容

第二种方案:使用rvictl进行真机抓包(可抓UDP)

iOS 5后,Apple引入了RVI remote virtual interface的特性,它只需要将iOS设备使用USB数据线连接到Mac上,然后使用rvictl工具以iOS设备的UDID为参数在Mac中建立一个虚拟网络接口rvi,就可以在Mac设备上使用tcpdump/Wireshark等工具对创建的接口进行抓包分析。

  1. 要求:需要有MacBook,iPhone通过USB线连接到电脑上,开启流量或WIFI

  2. 打开Xcode,在菜单栏找到Window,然后选择Devices and Simulators,可以看到iPhone对应的UDID(Identifier)

  3. 在终端执行下列命令,即可创建虚拟网卡(-s后面的参数为iPhone的UDID)

    1
    2
    rvictl -s 00008110-0021191E3A62401E
    # Starting device 00008110-0021191E3A62401E [SUCCEEDED] with interface rvi0
  4. 打开Wireshark,多次执行即可多开

    1
    sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
  5. 选择rvi0接口,即可监听流量

  6. 移除虚拟网卡

    1
    rvictl -x 00008110-0021191E3A62401E

3. 监听数据链路层

在Wireshark中可以抓取链路层的802.11协议,下面做一些总结。

首先,网卡要开启监听模式。对于macOS来说,先按住Option键,然后打开无线诊断,菜单栏选择窗口->嗅探器,选择频道与频宽,开始监听(结束后会自动生成pcapng文件到 /var/tmp/ 目录下)。

除此之外,在无线诊断菜单中选择扫描,即可捕捉到WIFI的详细信息,包括物理地址、波段、频道和频宽等。

或在终端探测WIFI信号强度与频道:

1
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s

4. 总结

结合Fiddler中的HTTP/HTTPS流量对应的Server IP,可以在Wireshark中找到对应的部分封包(如果要抓取手机流量,需要用Fiddler/Charles代理,要注意在Wireshark中ip.src对应电脑的IP,因为电脑代理手机发送请求给外部服务器),这两个软件一起使用效果最佳。

除此之外,还解决了iOS设备代理后无法捕捉UDP包的问题,对于安卓系统也有其他的解决方案(tcpdump,而且需要手机ROOT权限)。