问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
APP中间人抓包对抗
移动安全
APP常见抓包思路及方法实操
在平时的一些漏洞挖掘或者数据爬取采集过程中,都会遇到app的数据包抓取,随着攻防两端不断的对抗较量,各大厂商app的防中间人抓包技术都是十分强悍,那么这边主要针对一些app抓包的技术进行梳理,通过以下方法可以实现一些app的数据包抓取。 0x01 本地代理抓包 =========== ```php 本地代理抓包技术其实和平时web抓包的技术是一样的,只是android端需要进行证书安装,那么在Android7以上更是需要将证书安装到系统区域,具体操作如下。 ``` 1、HTTP/HTTPS代理抓包 ---------------- ```php 本地HTTP/HTTPS代理抓包可以根据自己使用的工具进行选择,这边已burpsuite为主进行操作 ``` 查看PC机本地IP  burpsuite设置监听IP和对应端口  导出证书  将导出的证书利用adb push命令发送到android系统sdcard目录下  在android系统安装该证书,打开设置下安全功能,选择从SD卡安装  选择push上来的证书,点击安装  进行选择命名安装,至此安装证书完成  继续为android网络进行代理配置,选择对应的网络,进行修改网络  高级选型下手动进行代理地址和端口的输入,这边以本地PC机的ip进行配置  配置完成便可以成功抓包  2、证书导入系统区域 ---------- ```php Android7以上,系统不再信任用户级的证书,只信任系统级的证书。因此为了正常抓取app应用的数据包,需要将证书安装至系统区域。 ``` 查看证书为用户权限证书  进行证书格式转换,当然,这块需要转换的证书可以是burpsuite、fridle或者charles均可以,主要针对你抓包使用的工具来说 ```python openssl x509 -inform DER -in burp.cer -out burp.pem ``` 查看转换为pem格式证书的hash值 ```python openssl x509 -inform PEM -subject_hash_old -in burp.pem | head -1 ```  重新命名该证书为9a5ba575.0 ```python mv burp.pem 9a5ba575.0 ``` 那么接下来需要将该证书导入系统区域,有些测试机虽然root了,但是启动adb root仍会报错,因此这块利用以下两种方法来实现 **方法一:** adb启动root权限 ```python adb root ```  重置可写模式 ```python adb remount ```  将该文件push到Android端/system/etc/security/cacerts/目录下  查看证书已为系统证书  **方法二:** 将该证书push到Android系统sdcard目录下 ```python adb push /root/Desktop/cer/9a5ba575.0 /sdcard ```  启动adb shell  重新装载Android文件系统,使得文件系统可读可写 ```python mount -o rw,remount /system ```  将该证书移动到/system/etc/security/cacerts/目录下 ```python mv 9a5ba575.0 /system/etc/security/cacerts/ ```  也是成功实现证书移动到系统区域 0x02 VPN实现socks5代理 ================== ```php 上述本地代理抓包是比较常用的,但是针对一些app对于https协议的检测导致目前很大一部分app是无法进行成功抓包。这时候可以考虑利用VPN软件socks5实现对Android系统的socks5做代理,实现所有流量数据的抓包,一般使用Charles工具更方便 ```  选择Proxy Settings进行SOKCKS Proxy进行配置   配置完代理后需要对抓取目标进行配置,host和port都为\*,也就是通过的所有流量都进行拦截  导出charles证书,在Android系统进行安装,安装方法和上面的本地代理抓包中方法一致  证书安装完成后在Android端安装Postern工具  进行代理配置,和charles配置的ip以及端口相同,选择SOCKS5代理类型  代理配置完成后配置规则,匹配所有地址都通过上面配置好的代理进行连接  完成上述配置后,打开代理,charles会提示选择Allow运行就配置完成  成功抓到Android端http/https流量  0x03 SSL pinning绕过 ================== ```php SSL Pinning即证书锁定,也是目前很多app防止中间人抓包的一类安全措施。其原理是将服务端提供的证书内置于app客户端中,当app发起请求时,通过对比app客户端中证书的信息和服务端证书的信息是否相同来判断该请求的合法性,而决定是否正常通信。 ``` 那么其中具体的原理和逻辑有兴趣的大家可以自行实现测试,针对SSL Pinning在app抓包过程中,一般可以通过hook技术进行绕过,当然大家可以任选xpose框和frida框架其一进行测试,本次测试主要利用frida框架的集成工具objection中的android sslpinning disable模块实现绕过。 利用burpsuite打开app进行抓包,发现大量告警提示SSL连接有问题,证书问题,那么就可以知道是SSL证书的问题,接下来利用frida框架进行绕过  在Android端启动frida server  启动objection工具对该app进行hook ```python objection -g com.xxxx.xxx explore ```  hook到后执行以下语句 ```python android sslpinning disable ```  再次运行app,利用burpsuite进行抓包,成功抓取到交互的数据包   0x04 服务端双向认证绕过 ============== ```php 在App生成过程中,客户端也存放一个证书,https协议握手时客户端把App中保存的证书发送给服务端,这种客户端校验服务端证书,同时服务端也校验客户端证书的方式称为双向校验。 那么针对这些存在双向校验的app,想要抓包,就需要绕过双向认证的检测,针对app对服务端的检测可以尝试利用SSL Pinning绕过技术进行绕过,但是对于服务端校验客户端证书时,则需要将app客户端中的证书找到,并导入到抓包工具中再进行抓包发包便可以绕过检测,接下来通过实操了解App客户端证书的获取。 ``` 利用burpsuite进行抓包,发现存在报错  解压apk文件,在assets文件下查找是否存在.p12或者.pfx结尾的证书文件  利用jeb对apk进行反编译,查找.p12或者PKCS12  对代码进行解码,解码后需要分析证书密码获取的方法函数,这块针对不同的app逻辑也是不一样,具体自行分析便可  进行跟进可以看到返回获取密码的方法  进行跟进,发现是一个native方法,那么便可以判断实际的逻辑在so库,利用java的反射方法实现  向上跟,可以看到具体的so库名称  利用IDA打开so库,搜索该方法  利用F5方法进行分析,可以看到传入的证书明文密码  在burpsuite中将assets目录下client.p12证书以及密码进行导入,成功之后便可以利用burpsuite进行抓包了 
发表于 2022-06-20 09:44:19
阅读 ( 9528 )
分类:
渗透测试
1 推荐
收藏
0 条评论
请先
登录
后评论
阿蓝
7 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!