开发过程中我们经常会需要对网络请求抓包,本次介绍的是使用BurpSuite抓取HTTP/HTTPS包,以及不越狱使用tcpdump抓取iPhone的网络包。
开发中我们经常会需要对HTTP/HTTPS请求进行抓包。
抓包实际上是在中间机器开了一个代理服务,让需要抓包的请求经过代理,我们就可以看到这些请求了。本质上是中间人攻击。
BurpSuite是一个常用的调试工具。
从 BurpSuite 官网下载jar包,右键点击,运行:
先从菜单Burp->Remember settings中检查是否All options都记录设置了,以便下次打开不用重新配置:
在选项卡的Proxy->Options中,选择代理规则,点击Edit:
在弹出的对话框中选择All interfaces,再点击OK,来监听所有的网卡:
至此已经可以通过代理来监听手机的HTTP请求了。现在我们再制作CA让手机信任,来解密被加密的HTTPS请求。
回到选项卡的Proxy->Options中,重新生成证书,以防被拥有相同的证书的人中间人攻击。生成后需要重启Burp:
重启Burp后,回到选项卡的Proxy->Options中,导出证书为Der格式:
然后将Der证书通过HTTP服务器或邮件发给手机,在手机上安装证书:
第一次用,先关闭排除规则,抓取全部的包。在Proxy->Intercept选项卡中,点击按钮,使其显示‘Intercept is off’:
先看下Mac的网卡地址:
然后在手机的wifi详情中设置手动代理:
如果是模拟器,在网卡的高级设置中,设置HTTP和HTTPS代理为127.0.0.1:8080:
在手机或模拟器中发送请求,然后在Burp选项卡的Proxy->HTTP history中可以查看到结果:
不删除一旦私钥泄露会被中间人攻击,保险起见,调试完就赶紧从手机删掉证书。
在系统设置->通用->描述文件中找到刚才安装的证书,然后删除:
我们经常会用tcpdump抓取各种协议的网络包。iOS5之后,可以使用Remote Virtual Interface(RVI)建立虚拟网卡进行抓包,好处是:
首先将手机用数据线连接到电脑。
使用ifconfig -l命令查看当前网卡:
$ ifconfig -l lo0 gif0 stf0 en0 en1 en2 p2p0 awdl0 bridge0 en4
查看手机的udid,然后使用rvictl命令建立rvi:
$ rvictl -s a1fad5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc60b Starting device a1fad59f135e2cd8f7dda951a15c01cd2220c60b [SUCCEEDED] with interface rvi0
再次使用ifconfig -l查看网卡:
$ ifconfig -l lo0 gif0 stf0 en0 en1 en2 p2p0 awdl0 bridge0 en4 rvi0
我们发现多出了一个rvi0,这个就是新建立的rvi。
$ sudo tcpdump -i rvi0 -w trace.pcap
然后在手机上进行操作,操作结束后在terminal里按control+c,结束抓包。然后trace.pcap就是生成的抓包记录。
之后断开rvi连接:
$ rvictl -s a1fad5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc60b Stopping device a1fad59f135e2cd8f7dda951a15c01cd2220c60b [SUCCEEDED]
我们可以将pcap文件转换成纯文本格式查看:
tcpdump -n -e -x -vvv -r trace.pcap > trace.txt
不过一般还是用wireshark直接打开pcap文件查看比较方便。
Over