前言

最近在做APP测试的时候,发现burpsuite不能抓到包,在开启抓包的时候APP也不会显示网络超时之类的提示,说明证书上没问题,测试后发现APP走的是tcp流量,而burpsuite抓的http流量导致没有抓到。

研究了一番,用charles抓包 + postern流量转发可以很好的解决该问题,故此本文记录一下安装以及抓包的过程。

准备一个root的模拟器或者一台手机即可。

Charles安装及设置

软件安装及注册

安装

安装网址:https://www.charlesproxy.com/download/previous-release/

建议安装4.6.8版本,最新版本是5.0会自动安装在WindowsAPP目录下,存在权限问题。

软件安装简单这里不做过多赘述。

注册

注册码获取:https://www.zzzmode.com/mytools/charles/

输入你的名称就可以得到注册码,再到软件里注册即可

软件里找到 help - register,然后把名字和license输入即可注册。

软件配置

证书安装

  1. windows证书安装

点击 install charles root certificate安装

  1. 安卓模拟器安装

点击save charles root certificate导出证书

导出pem文件

使用以下命令转换xxx.0格式

openssl x509 -inform PEM -subject_hash_old -in charles.pem

根据红框内名称改名为xxx.0,6ef8c626所以改名为6ef8c626.0,再把签名内容保存到里面:

使用以下命令将证书安装到模拟器:

adb root
adb remount
adb push 6ef8c626.0 /system/etc/security/cacerts
adb shell "chmod 644 /system/etc/security/cacerts/6ef8c626.0"

(手机的话可能要root,不然没有权限放入系统证书,建议用模拟器)

重启一下模拟器证书就安装好了

charles配置

proxy - proxy settings

这里这个端口自行设置,默认为8888,这个端口我们抓包要用到。

proxy - ssl proxying settings

至此,基础配置完毕。现在我们来试试抓包效果。

模拟器设置

这里以夜神模拟器为例子。

先前我们设置了http proxy,确保模拟器或手机和电脑在同一网络环境

获取电脑IP

设置模拟器代理

找到模拟器WLAN - wifi

长按点击修改网络

代理这一行设置为手动,再把抓包电脑的IP和端口填入

保存即可。

抓包测试

找一个没有做防护的APP进行抓包测试

发起登录请求,然后发现charles抓到了该请求:

Charles+postern实现流量转发代理抓包

此前的方法其实和burpsuite抓包的操作类似,只需要设置http代理,再将抓包设备设置代理即可抓到APP的http请求。

但是一些APP会做一些防护,例如不走http请求,走的是tcp流量,使用常规的burpsuite抓包的方式会发现APP的流量不会被你拦截,APP正常运行,bp抓不到包。

针对这一办法使用charles抓包的好处是其可以设置socks的代理,而postern工具又具有这一功能,所以结合该工具进行流量转发便可以抓到这些流量。常规抓不到包的情况都可以试一试这一套组合拳

这里拿某APP为例,只能抓到一些调用的流量,比如调用了百度地图map的api,所以抓到了请求的流量,但是其APP内核心的请求流量并没有被抓到。


(其他请求的流量,但不是APP域名相关的)

下面开启设置再进行抓包。

charles开启socks5代理

proxy - proxy settings

设置一个自定义的端口,保存就打开socks代理了。

postern安装及设置

安装:https://github.com/postern-overwal/postern-stuff/blob/master/Postern-3.1.2.apk

配置如下:

设置 - 配置代理

按照图中设置:

设置 - 配置规则

按照图中设置:

匹配类型选择匹配所有地址,动作选择通过代理连接,代理选择刚刚设置的代理

这样就配置完了,点击设置 - 打开VPN就可以进行流量转发了

检查wifi是否设置代理

如此前wifi设置了代理需要确保关闭代理再进行抓包。

此时就可以进行抓包了,

抓包测试

还是以该APP为例,这里再次打开APP可以发现charles直接抓到了相关域名:

可以看到其中一个请求是socket的请求,正是postern进行转发的流量。

进行请求也可以直接抓到请求包:

很好的解决了抓不到包的问题~~

二次转发联合burpsuite进行拦包

charles抓包能力强但是不能直接修改数据包,所以这里再将charles的流量转发至burpsuite,这样便能控制每一个数据包的请求了,但注意这个方法只能抓到来自http的流量,并不能抓到tcp的流量。

burpsuite设置代理

默认的127.0.0.1:8080即可,如果有修改配置也需要修改。

charles设置

找到proxy - external proxy settings

将web proxy server修改成burpsuite的代理地址,注意这里有两个选项,一个是HTTP 一个是HTTPS,两个都需要进行设置。

设置完毕后点击确认保存。

抓包

burpsuite开启拦截

模拟器发送请求,数据包成功被burpsuite抓到