Frida绕过Android SSL Pinning抓取数据流量
摘要
在使用漏洞赏金平台时,如果没有对其进行详细分析,可能会失去很多有用的东西。虽然可以使用漏洞扫描器,但是其中90%的扫描是基于静态分析的。若要进行动态分析的话就可能会发现更多的严重性漏洞:身份验证和授权缺陷、内容欺骗、内存泄露、应用程序逻辑缺陷以及跨站脚本攻击。
目前的应用程序为了防止中间人攻击使用了SSL Pinning技术,使得客户端在SSL握手之后,也可以通过再次验证服务器证书来避免中间人攻击。
本文将要介绍使用Frida和BurpSuite来绕过SSL Pinning。
准备
BurpSuite Community or Pro
https://portswigger.net/burp
Frida
pip install Frida
pip install frida-tools
Genymotion+Virtual Box
https://www.genymotion.com/
https://www.virtualbox.org/
操作
设备选择和网络设置
安装完Genymotion后,使用Android 9.0的Galaxy S9和桥接网络
Genymotion代理设置
BurpSuite代理设置为与Galaxy S9在同一网段的ip
为了用BurpSuite抓取流量需从BurpSuite中导出证书,然后在Galaxy S9中,由于android设备只能识别.cer格式,所以需要更改其后缀为cer
在Galaxy S9上配置代理之前,先在Genymotion上编辑代理设置
Settings -> Network -> Use HTTP Proxy -> 127.0.0.1:8080
genymotion adb
使用Genymotion自身的adb工具,操作其模拟器上运行的设备,在我的系统中,这些工具位于/opt/genymotion/tools,不同的系统位置会有所不同,可使用以下命令进行搜索:
find / -type d -name “genymotion” 2>/dev/null
安装证书
在Galaxy S9中安装cacert.cer,使用adb上传,再手动安装
$ /opt/genymotion/tools/adb push ~/Downloads/cacert.cer /sdcard/Download/
在如下位置进行证书导入
Settings -> Security & Location -> Encryption & Credentials
点击Install from SD Card,然后从/sdcard/Download/中导入证书
对证书命名
Galaxy S9设置wifi代理
Frida介绍
Frida可以将javascript代码片段或自己的库注入到Windows、macOS、GNU/Linux、iOS、Android和QNX的app中,同时Frida还提供了一些构建在Frida API之上的简单工具。这些工具你可以直接使用,也可以根据自己的需求来调整,或者是当作使用API的示例。
这里使用如下javascript文件进行绕过
/*
Universal Android SSL Pinning Bypass
by Mattia Vinci and Maurizio Agazzini
*/
Java.perform(function() {
var array_list = Java.use("java.util.ArrayList");
var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');
ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
// console.log('Bypassing SSL Pinning');
var k = array_list.$new();
return k;
}
}, 0);
为了使本机和android设备通信,需要在android设备上安装Frida服务器
针对Android的各种架构,Frida有其相对应的服务器版本,使用如下命令确定设备处理器类型
$ /opt/genymotion/tools/adb shell getprop ro.product.cpu.abi
x86
确认架构为x86后,安装x86的Frada服务器
wget https://github.com/frida/frida/releases/download/12.7.20/frida-server-12.7.20-android-x86.xz
unxz frida-server-12.7.20-android-x86.xz
mv frida-server-12.7.20-android-x86 frida-server
使用如下命令,将frida-server和BurpSuite证书放置到Galaxy S9上,并启动服务器,我放到了/data/local/tmp/位置
/opt/genymotion/tools/adb push ~/Downloads/cacert.cer /data/local/tmp/cert-der.crt
/opt/genymotion/tools/adb push ~/Downloads/frida-server /data/local/tmp
/opt/genymotion/tools/adb shell chmod 777 /data/local/tmp/frida-server
/opt/genymotion/tools/adb shell /data/local/tmp/frida-server &
验证测试
在这里我用来测试的应用程序是Instacart
执行以下命令以获取其程序包名称
$ frida-ps -U | grep instacart
com.instacart.client
未使用Frida
开启BurpSuite拦截,应用程序显示无法连接到Internet,显然是由于ssl pinning防护
使用Frida
执行下面的命令进行绕过
$ frida -U -f com.instacart.client -l ~/Downloads/bypass-ssl-frida.js –no-pause
现在,继续使用BurpSuite或其他的Web代理测试我们喜欢的应用程序了。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
最新评论