安卓APP抓包教程

安卓APP抓包教程

安卓APP抓包

背景

在渗透测试项目中,有很多目标单位有专属的APP,其中APP自身安全和APP对应的服务端接口也是渗透测试的攻击面,但是现有的APP安全防护措施不断提高,从APP本身发现安全问题的可能性降低,且服务器与客户端的通信过程也有较多的安全校验,下文将介绍安卓APP的抓包方法,方便渗透测试过程中的漏洞挖掘。

证书校验

现在很多APP的网络请求都使用HTTPS,HTTP报文可以很轻松的通过在手机上设置代理然后通过BurpSuite等报文嗅探、代理软件截获,便于后续分析,但是HTTPS报文传输过程需要证书认证,现有多数APP还有双向认证机制,即不仅服务器要校验请求是否来源于真正的客户端,客户端也会校验收到的信息是否来自于服务器,而且安卓7.0之后,APP只会识别系统级别的证书,而从BurpSuite和Charles中导出安装的证书是用户级证书,因此导致在转包软件中无法抓到相应APP的流量数据,因此有两种方法可以安装:

  • 获取Root权限,然后将抓包软件的证书安装为系统级证书

使用ADB安装证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1.从Charles取出证书

charles-proxy-ssl-proxying-certificate.pem
# 2.获取证书hash,并修改证书文件名为hash+后缀''.0'' 。本例为fc0dd2c8.0

iMac:~ imac$ openssl x509 -in ./charles-proxy-ssl-proxying-certificate.pem -noout -subject_hash

# 执行结果:fc0dd2c8
# 3.连接测试机,adb shell 修改 /system权限,
adb push fc0dd2c8.0 证书到 /system/etc/security/cacerts/

mount -o rw,remount /system
# 4.修改证书权限为664,重启设备

cd /system/etc/security/cacerts/

chmod 664 ./fc0dd2c8.0

reboot
  • 修改APP包Androidmanifest,文件并将APP重新打包

APP校验证书

有些APP会有SSL pinning通过APP自身代码校验证书和服务器的关系,这种情况下使用自己导出的证书无法通过此步认证,可以通过逆向APP将APP验证的证书提取出来,证书通常在/assets目录下,通过jeb等反编译工具全局搜索cer、p12、pem、ssl等关键字可以找到相应证书未知,将证书导出并导入到抓包程序内即可,如下如是某APP内证书存放位置:

JEB界面

模拟器抓包

可能为了更方便的实现模拟器自身的功能,目前市面上多款模拟器的安卓版本多为安卓6,因此在抓包就相对容易一些,首先在模拟器中安装Xposed框架,然后在框架中安装JustTrustMe模块,安装成功后界面如下:

JustTrustMe

在模拟器中将系统代理地址设置为Charles地址,默认为本机IP+8090端口

代理修改

抓包成功示意图:

抓包

对于部分反分析功能比较完善的APP,以上分析方法可能就会失效,比如APP会校验自身运行环境是否已授权Root,如果已授权则禁止运行,或者检测是否安装Xposed这种通常在正常使用环境中不会出现的APP就会退出等,遇到这种APP还是要先通过逆向将检测逻辑给过掉才能继续分析。

代理APP

除了以上手机抓包方式,还有一个可以安装在目标安卓系统的一款APP:Packet Capture,此应用通过设置系统代理的方式截获其他APP的数据包,也可以对一些没有双向认证的APP进行简单地分析。

软件界面:

抓包

抓包界面:

数据包内容

总结

以上方法可以实现安卓客户端流量抓取,方便渗透测试过程中发现更多渗透入口。

参考文章

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×