Frida绕过Android SSL Pinning抓取数据流量

匿名者  469天前

摘要

在使用漏洞赏金平台时,如果没有对其进行详细分析,可能会失去很多有用的东西。虽然可以使用漏洞扫描器,但是其中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和桥接网络

pinning1.png

Genymotion代理设置

BurpSuite代理设置为与Galaxy S9在同一网段的ip

pinning2.png

为了用BurpSuite抓取流量需从BurpSuite中导出证书,然后在Galaxy S9中,由于android设备只能识别.cer格式,所以需要更改其后缀为cer

pinning3.png

在Galaxy S9上配置代理之前,先在Genymotion上编辑代理设置

Settings -> Network -> Use HTTP Proxy -> 127.0.0.1:8080

pinning4.png

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

pinning5.png

点击Install from SD Card,然后从/sdcard/Download/中导入证书

pinning6.png

对证书命名

pinning7.png

Galaxy S9设置wifi代理

pinning8.pngpinning9.png

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防护

pinning10.png


使用Frida

执行下面的命令进行绕过

$ frida -U -f com.instacart.client -l ~/Downloads/bypass-ssl-frida.js –no-pause

pinning10-1.png

pinning11.png

现在,继续使用BurpSuite或其他的Web代理测试我们喜欢的应用程序了。


本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/

最新评论

昵称
邮箱
提交评论