APP中间人抓包对抗

APP常见抓包思路及方法实操

在平时的一些漏洞挖掘或者数据爬取采集过程中,都会遇到app的数据包抓取,随着攻防两端不断的对抗较量,各大厂商app的防中间人抓包技术都是十分强悍,那么这边主要针对一些app抓包的技术进行梳理,通过以下方法可以实现一些app的数据包抓取。

0x01 本地代理抓包

     本地代理抓包技术其实和平时web抓包的技术是一样的,只是android端需要进行证书安装,那么在Android7以上更是需要将证书安装到系统区域,具体操作如下。

1、HTTP/HTTPS代理抓包

    本地HTTP/HTTPS代理抓包可以根据自己使用的工具进行选择,这边已burpsuite为主进行操作

查看PC机本地IP

image.png

burpsuite设置监听IP和对应端口

image.png

导出证书

image.png

将导出的证书利用adb push命令发送到android系统sdcard目录下

image.png

在android系统安装该证书,打开设置下安全功能,选择从SD卡安装

image.png

选择push上来的证书,点击安装

image.png

进行选择命名安装,至此安装证书完成

image.png

继续为android网络进行代理配置,选择对应的网络,进行修改网络

image.png

高级选型下手动进行代理地址和端口的输入,这边以本地PC机的ip进行配置

image.png

配置完成便可以成功抓包

image.png

2、证书导入系统区域

    Android7以上,系统不再信任用户级的证书,只信任系统级的证书。因此为了正常抓取app应用的数据包,需要将证书安装至系统区域。

查看证书为用户权限证书

image.png

进行证书格式转换,当然,这块需要转换的证书可以是burpsuite、fridle或者charles均可以,主要针对你抓包使用的工具来说

openssl x509 -inform DER -in burp.cer -out burp.pem

查看转换为pem格式证书的hash值

openssl x509 -inform PEM -subject_hash_old -in burp.pem | head -1

image.png

重新命名该证书为9a5ba575.0

mv burp.pem 9a5ba575.0 

那么接下来需要将该证书导入系统区域,有些测试机虽然root了,但是启动adb root仍会报错,因此这块利用以下两种方法来实现
方法一:
adb启动root权限

adb root

image.png

重置可写模式

 adb remount

image.png

将该文件push到Android端/system/etc/security/cacerts/目录下

image.png

查看证书已为系统证书

image.png

方法二:
将该证书push到Android系统sdcard目录下

adb push /root/Desktop/cer/9a5ba575.0 /sdcard

image.png

启动adb shell

image.png

重新装载Android文件系统,使得文件系统可读可写

mount -o rw,remount /system

image.png

将该证书移动到/system/etc/security/cacerts/目录下

mv 9a5ba575.0 /system/etc/security/cacerts/

image.png

也是成功实现证书移动到系统区域

0x02 VPN实现socks5代理

    上述本地代理抓包是比较常用的,但是针对一些app对于https协议的检测导致目前很大一部分app是无法进行成功抓包。这时候可以考虑利用VPN软件socks5实现对Android系统的socks5做代理,实现所有流量数据的抓包,一般使用Charles工具更方便

image.png

选择Proxy Settings进行SOKCKS Proxy进行配置

image.png

image.png

配置完代理后需要对抓取目标进行配置,host和port都为*,也就是通过的所有流量都进行拦截

image.png

导出charles证书,在Android系统进行安装,安装方法和上面的本地代理抓包中方法一致

image.png

证书安装完成后在Android端安装Postern工具

image.png

进行代理配置,和charles配置的ip以及端口相同,选择SOCKS5代理类型

image.png

代理配置完成后配置规则,匹配所有地址都通过上面配置好的代理进行连接

image.png

完成上述配置后,打开代理,charles会提示选择Allow运行就配置完成

image.png

成功抓到Android端http/https流量

image.png

0x03 SSL pinning绕过

     SSL Pinning即证书锁定,也是目前很多app防止中间人抓包的一类安全措施。其原理是将服务端提供的证书内置于app客户端中,当app发起请求时,通过对比app客户端中证书的信息和服务端证书的信息是否相同来判断该请求的合法性,而决定是否正常通信。

那么其中具体的原理和逻辑有兴趣的大家可以自行实现测试,针对SSL Pinning在app抓包过程中,一般可以通过hook技术进行绕过,当然大家可以任选xpose框和frida框架其一进行测试,本次测试主要利用frida框架的集成工具objection中的android sslpinning disable模块实现绕过。
利用burpsuite打开app进行抓包,发现大量告警提示SSL连接有问题,证书问题,那么就可以知道是SSL证书的问题,接下来利用frida框架进行绕过

image.png

在Android端启动frida server

image.png

启动objection工具对该app进行hook

objection -g com.xxxx.xxx explore

image.png

hook到后执行以下语句

android sslpinning disable

image.png

再次运行app,利用burpsuite进行抓包,成功抓取到交互的数据包

image.png

image.png

0x04 服务端双向认证绕过

    在App生成过程中,客户端也存放一个证书,https协议握手时客户端把App中保存的证书发送给服务端,这种客户端校验服务端证书,同时服务端也校验客户端证书的方式称为双向校验。
    那么针对这些存在双向校验的app,想要抓包,就需要绕过双向认证的检测,针对app对服务端的检测可以尝试利用SSL Pinning绕过技术进行绕过,但是对于服务端校验客户端证书时,则需要将app客户端中的证书找到,并导入到抓包工具中再进行抓包发包便可以绕过检测,接下来通过实操了解App客户端证书的获取。

利用burpsuite进行抓包,发现存在报错

image.png

解压apk文件,在assets文件下查找是否存在.p12或者.pfx结尾的证书文件

image.png

利用jeb对apk进行反编译,查找.p12或者PKCS12

image.png

对代码进行解码,解码后需要分析证书密码获取的方法函数,这块针对不同的app逻辑也是不一样,具体自行分析便可

image.png

进行跟进可以看到返回获取密码的方法

image.png

进行跟进,发现是一个native方法,那么便可以判断实际的逻辑在so库,利用java的反射方法实现

image.png

向上跟,可以看到具体的so库名称

image.png

利用IDA打开so库,搜索该方法

image.png

利用F5方法进行分析,可以看到传入的证书明文密码

image.png

在burpsuite中将assets目录下client.p12证书以及密码进行导入,成功之后便可以利用burpsuite进行抓包了

image.png

  • 发表于 2022-06-20 09:44:19
  • 阅读 ( 10609 )
  • 分类:渗透测试

0 条评论

请先 登录 后评论
阿蓝
阿蓝

7 篇文章

站长统计