安卓渗透实战(三):系统级证书部署与多工具抓包策略

张开发
2026/4/9 11:48:25 15 分钟阅读

分享文章

安卓渗透实战(三):系统级证书部署与多工具抓包策略
1. 环境准备与核心概念解析在开始安卓系统级证书部署之前我们需要先理解几个关键概念。系统证书与用户证书的最大区别在于信任级别——系统证书会被所有应用默认信任而用户证书可能会被某些安全敏感的应用拒绝。这就解释了为什么很多安全测试场景下即使安装了Burp Suite或HttpCanary的证书仍然会遇到HTTPS流量无法解密的情况。我常用的测试环境配置如下已Root的安卓手机建议Android 7-11版本太新的系统可能有SELinux限制Magisk 23.0带MagiskHide功能支持Root的文件管理器推荐MT管理器抓包三件套Burp Suite v2022.3、Postern 3.1.3、HttpCanary 3.3.6有个容易忽略的细节不同安卓版本的系统证书存储路径可能不同。Android 7通常使用/system/etc/security/cacerts/而部分定制ROM会放在/etc/security/cacerts/。我遇到过华为EMUI系统将证书存放在/system/etc/certificates/的情况这时候就需要先用ls -l /etc命令确认实际路径。2. 证书升级实战从用户证书到系统证书2.1 Burp Suite证书系统化常规安装Burp证书只是用户级操作这里分享我的系统级部署流程先用电脑浏览器访问http://burp下载cacert.der将证书重命名为9a5ba575.0这是OpenSSL哈希命名规则通过ADB推送证书到手机adb push 9a5ba575.0 /sdcard/在MT管理器中将证书移动到/system/etc/security/cacerts/关键一步修改证书权限为644chmod 644 /system/etc/security/cacerts/9a5ba575.0遇到过证书不生效的情况检查下SELinux上下文是否正确ls -Z /system/etc/security/cacerts/9a5ba575.0应该显示u:object_r:system_file:s0如果不是需要执行chcon u:object_r:system_file:s0 /system/etc/security/cacerts/9a5ba575.02.2 HttpCanary证书深度处理小黄鸟的证书处理更复杂些实测发现需要三个关键操作导出证书后除了复制到系统证书目录还需要cp /storage/emulated/0/HttpCanary/certs/xxx.cer /data/data/com.guoshi.httpcanary/cache/HttpCanary.pem创建JKS密钥库keytool -importcert -alias httpcanary -file HttpCanary.pem -keystore HttpCanary.jks -storepass httpcanary修改/data/data/com.guoshi.httpcanary/shared_prefs中的配置XML文件将ca_create_method值改为13. 多工具抓包策略对比3.1 WLAN代理模式这是最基础的抓包方式但有几个优化技巧使用netsh wlan set hostednetwork创建虚拟热点时建议频段设为5GHz减少干扰在Burp的Proxy Listeners设置中勾选Support invisible proxying遇到代理检测时可以尝试修改UA为Dalvik/2.1.03.2 Postern全局代理Postern的VPN模式能绕过部分代理检测配置时注意规则配置建议使用DOMAIN-KEYWORD而非完整域名启用Bypass VPN for local addresses避免内网访问问题在MagiskHide中排除Postern进程3.3 HttpCanary透明模式小黄鸟的高级用法启用强制WebSocket明文传输使用目标应用过滤功能时要同时勾选子进程对于Xposed检测的应用需要配合TrustMeAlready模块4. 疑难问题解决方案证书安装后仍报证书不受信任检查/system/etc/security/cacerts/下证书权限确认时间日期设置正确SSL校验依赖时间同步尝试清除应用数据或卸载重装抓包工具无流量显示在终端执行iptables -L -t nat -v检查流量走向关闭IPv6可能造成流量旁路使用tcpdump -i any -s 0 -w /sdcard/capture.pcap辅助诊断特定应用无法抓包检测是否使用了证书固定Certificate Pinning检查应用是否使用原生代码Native Code实现网络请求尝试JustTrustMe模块或objection工具5. 安全防护与反检测在渗透测试中避免被目标系统检测同样重要修改Burp的默认监听端口8080定期更换证书指纹可以使用openssl x509 -in cacert.cer -noout -fingerprint查看在Magisk设置中启用随机包名和隐藏Magisk使用proxychains-ng实现多级代理跳转有次在测试金融类APP时发现他们通过检测/system/bin/su文件来判断Root状态。我的解决方案是用Magisk创建/system/bin/su的bind mount修改文件内容为无效二进制数据设置immutable属性chattr i /system/bin/su6. 自动化脚本与效率工具为了提高效率我编写了几个实用脚本证书自动安装脚本#!/system/bin/sh CERT_NAME$(openssl x509 -inform DER -in /sdcard/cacert.der -noout -subject_hash_old).0 cp /sdcard/cacert.der /system/etc/security/cacerts/$CERT_NAME chmod 644 /system/etc/security/cacerts/$CERT_NAME chcon u:object_r:system_file:s0 /system/etc/security/cacerts/$CERT_NAME代理快速切换脚本import os def set_proxy(ip, port): os.system(fsettings put global http_proxy {ip}:{port}) os.system(svc wifi disable svc wifi enable)对于需要频繁切换场景的测试人员建议使用Tasker配置自动化情景模式实现连接特定WiFi时自动开启代理检测到目标应用启动时激活HttpCanary夜间自动清除所有抓包日志7. 进阶技巧与新型挑战随着安卓系统更新新的防护机制不断出现。在Android 12上测试时发现受限的/system分区写入需要先执行mount -o remount,rw /system强化的SELinux策略建议在Magisk中安装SELinux Permissive模块硬件级证书验证某些厂商设备使用TEE验证证书链最近遇到个棘手案例某应用使用QUIC协议传输关键数据。解决方案是在Burp中禁用HTTP/3支持使用--disable-quic参数启动Chromium浏览器在路由器层面限制UDP 443端口对于WebSocket流量抓包HttpCanary的明文模式效果最好。如果是Protobuf编码数据需要先用小黄鸟保存原始流量使用protoc工具反编译protoc --decode_raw captured.data根据输出结果编写.proto文件在实际项目中我习惯将Burp和HttpCanary组合使用先用小黄鸟快速定位API再到Burp构造复杂攻击载荷。这种组合拳方式在时间紧迫的渗透测试中特别有效。

更多文章