简述APP资产收集与突破抓包限制

 

资产提取

AppinfoScanner

首先还是我们经常使用的AppinfoScanner,AppinfoScanner是一款适用于以HW行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、攻击队成员、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如:Title、Domain、CDN、指纹信息、状态信息等。

这里的下载地址为:https://github.com/kelvinBen/AppInfoScanner

这里我们下载好了之后,首先安装依赖库

cd AppInfoScanner
python-m pip install -r requirements.txt

安装依赖库之后,直接将APK放到该工具的文件夹中,使用该脚本去扫描该APK文件中所含的链接信息

这里运行命令为

1.扫描Android应用的APK文件、DEX文件
pythonapp.pyandroid-ixxx.apk
2.扫描IOS应用的IPA文件、Machine-o文件
pythonapp.pyios-ixxx.ipa
3.扫描web站点的文件、目录、需要缓存的站点URL
pythonapp.pyweb-iwww.xxx.com

这里我们的目标是APK文件,所以我们直接使用第一条命令即可

pythonapp.pyandroid-i 123.apk

这时,AppinfoScanner就会将该APK中所涉及到的链接全部都提取出来,在扫描后会在AppinfoScanner中输出一个以当前时间命名的xls文件,其中就包含了对该APP中所提取的一些资产信息,但是该xls中的资产提取的并不完整,可能是我APK的原因吧

在out文件夹中还会有一个以该APK名所命名的文件夹,里面存放这该APK所逆向出来的源代码,这里我们可以将该源代码导入到IDEA中

打开IEDA,然后选择打开,选择所输出的文件夹,单击确定

使用快捷键ctrl+shift+F全局搜索,去搜索该代码中的一些关键信息,如http://、https://等也可以获得一些关键信息

MonSF

移动安全框架 (MobSF) 是一种自动化的一体化移动应用程序 (Android/iOS/Windows) 渗透测试、恶意软件分析和安全评估框架,能够执行静态和动态分析。MobSF 支持移动应用程序二进制文件(APK、XAPK、IPA 和 APPX)以及压缩源代码,并提供 REST API 以与您的 CI/CD 或 DevSecOps 管道无缝集成。动态分析器可帮助您执行运行时安全评估和交互式仪器测试。

MonSF是基于docker运行的,我们只需要找来一台安装docker的主机运行如下两条命令即可

dockerpull opensecurity/mobile-security-framework-mobsfdockerrun -it -p 8008:8000 opensecurity/mobile-security-framework-mobsf:late

这里拉取环境之后直接运行即可,由于我之前已经拉取了环境,所以比较快一些,如果刚开始的话会需要等待一段拉取时间,如果已经拉取成功环境之后,下次启动只需要

docker run -it -p 8008:8000 opensecurity/mobile-security-framework-mobsf:latest

命令即可

启动好之后,直接访问docker主机的8008端口

这里就是我们搭建好的MobSF界面,为web图形化界面,这里我们直接将APK拖到或者上传MobSF中之后,它就会对当前APK进行一个扫描,扫描完成之后即可看到这个APK的一些安全信息

也可以去将该APK的java源代码、Smali源代码等

一些易受攻击的点

和网址、电子邮件等信息

还可以对目标生成一份报告等等其他功能,这里不再阐述

 

突破抓包限制

在测试APP中,经常会遇到一种情况,就是当我们打开代理之后,或者经常会出现抓不到包、一直检测失败

等各种情况,这里大概情况分为两点

  1. APK做了防抓包机制,如反代理或反证书校验的检测
  2. 该APK没有走http/S协议,走了其他协议

首先让我们先了解一下什么是反代理和反证书校验

  1. 反代理,当该APK在启动时会判断客户端是否启动代理,如果启动代理则无法进行通信
  2. 反证书检测,抓包时,无法连接网络并且也接收不到任何数据,将APP代码内置仅接受指定域名的证书,而不接收操作系统或浏览器内置的CA根证书

突破反代理

首先当我们的APK的检测机制为反代理时,我们该如何去进行一个绕过,这里他的判断机制是当检测到客户端启动代理时,不发送数据,那我们可以不使用模拟器的代理,而使用本机的代理工具去包含安卓模拟器去启动,再将代理工具的流量转发到我们的burp上,哪这样我们的流量走向就成了下图,模拟器中并没有设置代理,但是他的整个流量都会走proxifier,proxifier会将流量都转发到burp上面,从而达到绕过反代理的效果。

首先打开我们在内网渗透测试中经常使用的代理工具Proxifier,到配置文件中的代理服务器选项–>添加代理服务器–>服务器ip地址与端口为burp所监听的端口–>协议选择HTTPS,点击确定

在设置好代理之后,我们再来设置规则

点击确定之后,我们将夜神模拟器重启,可以看到数据包已经在传递了

这时我们再打开反代理的APK时,就可以看到我们的burp已经成功接收到了数据

突破证书校验进行抓包

那么如果APK是基于证书校验或者走了其他的比如SSL等协议,那这时候我们该如何去抓取该APK的数据包呢?

这里我们就可以尝试使用frida+r0capture+wireshark组合,使用frida和r0capture联动去抓取该APK的所有数据包,然后使用wireshark去进行分析该APK的流量详情。

首先各工具的下载地址为

https://github.com/r0ysue/r0capture
https://github.com/frida/frida/releases
https://www.wireshark.org/#download

首先安装Frida

本地安装firdra和firdra-tools,使用pip进行安装

pipinstall frida
pipinstall frida-tool

模拟器安装frida-server

这里在安装的时候需要注意以下两点

1、根据模拟器的位数去下载其相对应的frida-server脚本

在这里可以调用夜神模拟器路径下的nox_adb.exe去调用命令

nox_adb.exe shell //进入到模拟器bash视图
getprop ro.product.cpu.abi //查看位数信息

这里可以看到我们的模拟器系统为x86操作系统

2、frida-server的版本要与本机pip安装的版本一致

可以使用pip list来查看我们所安装的frida的版本信息,这里我们本地所安装的frida版本为15.1.22,那么我们的模拟器也下载15.1.22版本的frida-server就可以了

通过刚刚的基本信息之后,我们了解到,我们要下载版本为15.1.22,x86的frida,这里我们直接打开下载界面找到该版本进行下载即可,这里arm为真机使用版本,x86和x86_64为模拟器使用版本,这里我们下载frida-server-15.1.22-android-x86.xz文件即可

下载完成之后,我们将其放到夜神模拟器的bin目录下,使用Nox_adb.exe将其上传到模拟器中

nox_adb.exe push frida-server-15.1.22-android-x86 /data/local/frida-server

运行frida

OK,上传成功,接下来进入到模拟器的bash视图下,执行frida-server即可

nox_adb.exe shellcd /data/local/frida-server
ls -lh
chmod u+x frida-server

好,这里我们成功运行了frida-server,接下来就检查一下他是否正常运行并是否和我们本机的frida正常连接

模拟器中ps | grep frida-server,可以看到进程

本机中frida-ps -U or frida-ps -R可以正常返回

这里frida-ps -R报错,则使用adb forward tcp:27042 tcp:27042将流量转发出去

然后就是我们的最后一步,获取我们要抓取的APK包名,这里有两种查看方式,一种是在/data/data目录中存放这所有文件的包名,还有就是可以使用APK资源提取器去查看APK的包名,这里我习惯用第二种方式比较可视化一些

然后就可以启动我们的r0capture工具进行抓包分析,命令为

python r0capture.py -U -f 包名 -v -p 文件名.pcap

这时,r0capture就会自动启动该APK文件,并将我们在进行操作时的流量进行保存为pacp,当我们停止运行该APK后,就会在r0capture中看到命名的pacp文件

这里我们直接打开分析即可

这里就成功抓取到了我在进行验证时的数据包,成功绕过证书检测等机制,但是该方法有些弊端,就是所导出的数据包我们并不能将其进行修改,后续最佳的办法为frida+r0capture联动fillder和XPosed框架去绕过限制,但这里由于篇幅原因,下一篇再来说一说以下方法吧!

(完)