文章作者 :udtxgysg
原文地址 :
https://forum.90sec.com/t/topic/1881
前言
本文主要介绍在对APP渗透测试的时候,对于APP “抓不到包” “点击无反应” “网络错误” 等解决思路。
正文
当我们在实战中总会遇到一些APP抓不到包或网络错误,有的甚至直接没反应,
首先我们要理解代理抓包的关键就是需要HTTP客户端按照要求去连接代理服务器,
一般情况下我们已经在系统层面上设置了代理,通常HTTP客户端都是按要求去实现的,在进行HTTP请求前会先检查系统代理,如果有设置代理,客户端会直接使用完整url去连接代理服务器。
不同的平台通常会实现自己的HTTP客户端,虽然他们都按照协议要求实现了代理功能,但是并不一定在默认情况下会直接使用系统代理,在现实中碰到这种情况还不少。
对于防止APP抓包有以下几种方式
1、在客户端请求网络之前先判断是否使用了代理
2、在代码中增加无代理模式,比如 “Proxy.NO_PROXY” 对于这种可以使用HOOK方法,具体操作大家可以百度一下相关的知识
3、 SSL Pinning机制,这种常见的报错提示语为“网络错误”
绕过方式
使用Android7.0以下的系统 (貌似不是很管用)
将Fiddler/Burp证书安装到系统默认预置的CA证书区域中
反编译APK,修改AndroidManifest.xml文件
VitualXposed框架+JustTrustMe模块 (我在测试过程中安装JustTrustMe模块的时候老是出错,不能正常使用,大家可以自行去尝试)
控制DNS解析,通过修改dns的方式让客户端以为我们的代理服务器就是目标服务器
下面我将用某APP做测试,顺便介绍一款在安卓运行的抓包工具“HttpCanary”
此工具分高级版和免费版,主要区别于免费版不能进行改包重放等功能,不过问题不大,我们可以在浏览器中操作
下面进入实战阶段
首先已正常流程进行抓包,设置Burp代理,手机代理
当我们打开APP并进行点击发送验证码,以及登入功能按钮的时候,APP毫无反应,从打开到加载完这是Burp所抓到的数据包
-----可以看到只抓到一个数据包,而且还没啥用看第一张图所圈的位置相信大家都知道是出问题了,你说怎么肥事?我也不知道!
下面我们使用第二种方式,不设置模拟器中的系统代理
利用Proxifier和Fiddler工具监听模拟器的请求,然后通过Fiddler把流量转到Burp中.
当一切都设置好准备一展拳脚的时候, 咦~ 怎么肥事!
当点击发送验证码和登入按钮的时候,除了抓到一些url地址,数据包什么的啥也没有,此刻 挠挠了头,点上烟,深深抽上了一口,难道他不是通过检测系统代理而判断的?
此刻又进入了漫长的查资料过程........
----当我们在实战中遇到这种情况,先判断是为何抓不到包,他是在代码中设置了无代理还是验证系统的证书
因为在Android7.0以上的系统,不会信任用户证书
所以就出现了我们使用Android7.0以下的系统进行测试,或者把Burp的证书安装到系统层绕过检测,最后根据目标对应的配置去绕过检测----
当查了很久的资料,尝试了网上所教的各种方法,HOOK因为太过复杂懒得配置,留到最后,可能对大佬来说很简单...
然后尝试使用VitualXposed框架+JustTrustMe模块
模块不能正常运行,失败!
使用Android5系统,失败!
证书安装到系统层,失败!
当我正不知所措的时候,决定尝试反编译apk
随后用jadx打开了classes.dex文件全局搜索 “Proxy.NO_PROXY” 如下
发现了一段代码,对于Java一窍不通的我
此刻很头疼,当我看到这段代码的时候虽然我不懂java但我知道这个函数肯定与代理有关。
---当我正考虑下一步怎么进行的时候,突然冒出来一个想法,不知道有没有手
机版的抓包工具,利用手机版的抓包工具能不能绕过?
然后就找到"HttpCanary"这款工具
开始测试
工具安装好以后,把需要抓的APP添加到工具中,然后点击开始抓包
哦豁~ 可以正常抓包了!
----点击数据包可以查看详情信息,以及修改和重放----
当然在模拟器中测试还是有点不方便,随后转战浏览器测试,当直接访问目标url的时候会爆出以下错误
这里提示参数错误,那肯定是数据包中缺少某个参数,观察在模拟器中抓到的包,经过测试发现缺少"X-UDID"这个头,在数据包中添加X-UDID头,返回正常
以上就是本次对APP抓包的所有流程以及思路,在实战过程中信息收集与思路尤其重要,虽然本文并没有很高超的技术含量,但也为我们的思路做了一个扩展,这也是我第一次接触这款工具,这次测试也为我以后在抓包环节省下不少时间。
侵权请私聊公众号删文