‘壹’ 一文帮你解决APP抓包难题
一文帮你解决APP抓包难题在日常渗透过程中,我们经常会遇到瓶颈无处下手。如果攻击者从公众号或者APP进行突破,往往会有很多惊喜。然而,市场上的APP都会为防止别人恶意盗取和恶意篡改进行一些保护措施,比如模拟器检测、root检测、APK加固、代码混淆、代码反调试、反脱壳、签名校验等等对抗机制。面对这些挑战,测试人员在渗透APP时通常会使用burp或Charles这类抓包工具进行抓包,查看请求记录里的域名及链接地址是否可以进一步利用。但在遇到一些APP出现证书报错或者抓不到包的情况时,该如何应对呢?本文将提供一些新的解决方案和思考,帮助你解决这类问题。
数字证书与HTTPS抓包
我们知道,HTTP协议传输的是明文信息,是可以直接捕获的,从而造成了数据泄露。为了解决这个问题,HTTPS加密机制应运而生,它通过使用证书和数字签名解决了中间人拦截的问题。在HTTPS中,证书验证是确保数据安全的关键步骤。当遇到APP抓包难题时,了解如何应对APP的抓包对抗措施至关重要。
如何应对APP的抓包对抗
在进行HTTPS抓包时,首先需要导入用户证书。这通常在使用burp时的第一步,即将burp的证书导出,并添加到浏览器的受信任根证书颁发机构中,以便信任burp发来的请求包并能够修改数据。对于APP抓包,同样需要将burp证书安装到系统证书中。通常情况下,从SD卡安装的证书会存放在用户信任的凭据下。
Android系统对证书的处理
Android系统在不同的版本中对证书处理存在差异。在Android 7.0以前,应用默认信任系统证书和用户证书。然而,从Android 7.0开始,系统仅信任系统证书。因此,如果手机运行的是Android 7.0以上版本,并且没有绑定SSL证书,抓包时可能会出现问题。
解决Android 7.0以上版本的抓包问题
为了解决这一问题,可以将burp证书安装到Android 7.1.2的用户证书下。对于自签名证书,需要先将其添加到系统证书中,才能正常访问HTTPS网站。生成自签名证书的方法可以参考相关教程。
证书有效期的问题
如果导入系统证书后仍无法抓取包,并且浏览器报出NET::ERR_CERT_VALIDITY_TOO_LONG错误,这可能是因为Chrome从2018年开始只信任有效期少于825天(27个月)的证书。遇到这种情况,可以创建一个有效期更短的root证书,然后通过burp重新导出证书并放入系统证书路径下。
SSL Pinning与证书绑定
对于使用自签名免费证书的APP,大部分开发者会在代码中实现证书绑定(SSL Pinning)。这意味着APP会对发送请求的客户端进行证书校验,而非仅依赖系统和浏览器的校验。当遇到这类问题时,可以尝试以下方法进行解决:
代码中校验证书公钥
开发人员经常将网络配置文件保存在特定位置,例如在XML目录下。在反编译后的XML目录中,会有一个network_security_config.xml文件,该文件通常用于指定证书绑定的域名。检查此文件中的校验方式,以了解APP如何进行证书绑定。
使用Frida进行绕过
如果证书绑定逻辑在代码中实现,可以使用Frida进行hook,绕过证书校验逻辑,从而实现抓包。Frida是一种强大的动态代码注入工具,允许在运行时修改或替换程序行为。通过hook关键的验证函数,可以实现绕过逻辑。
总结与建议
通过本文的介绍,你将了解到如何解决APP抓包难题,包括应对数字证书与HTTPS抓包、解决Android系统对证书的处理、应对SSL Pinning与证书绑定问题。掌握这些解决方案和思考,将有助于你在渗透测试中更有效地进行抓包操作。