8种绕过iOS应用程序SSL Pinning的方法

admin 2024年11月22日11:33:10评论110 views字数 5485阅读18分17秒阅读模式

8种绕过iOS应用程序SSL Pinning的方法

什么是SSL Pinning

SSL Pinning是在客户端使用的一种技术,通过验证服务器证书来避免中间人攻击。开发人员在开发过程中将可信证书列表嵌入(或固定)到客户端应用程序,并在运行时使用它们与服务器证书进行比较。如果服务器与本地证书副本不匹配,则连接将直接中断,甚至不会向该服务器发送更多用户数据。这种实施可确保用户设备仅与专用的可信服务器通信。

为什么应在iOS应用程序中实施SSL Pinning

SSL Pinning可以防止中间人攻击,这意味着攻击者无法拦截流量和修改数据。如果攻击者无法拦截流量,则应用程序会自动阻止许多服务器端漏洞,因为攻击者无法执行 API 级别的测试用例。

绕过SSL Pinning的基本方法

绕过 SSL Pinning的基本方法是分析应用程序的二进制文件,以确定它是用哪种语言编写的。然后采用特定于语言的方式来绕过该iOS应用程序的 SSL Pinning。例如,如果应用程序使用Flutter或Xamrian构建,那么我们将使用Hotspot方法,如果应用程序在Cordova中构建,那么我们将尝试替换硬编码的SHA-256哈希等。

绕过SSL Pinning的不同方法

一、热点方法(Flutter & Xamarin 应用程序)

Flutter 和 Xamarin 应用程序不支持系统代理(Flutter 是由 Google 开发的一个开源 UI 框架,用于构建跨平台应用程序。Xamarin 是由微软支持的一个跨平台开发框架,它允许开发者使用 .NET 和 C# 编程语言开发可以运行在 iOS、Android 和 Windows 上的应用程序。)这意味着如果在 iPhone 上设置代理并尝试捕获流量,应用程序可能会报错或无法捕获流量。因此,通常采用热点方式来对这类应用程序进行 API 级别的渗透测试。

在开始之前,首先确定应用程序是在Flutter或Xamarin中构建的。

1.解压缩 IPA 文件:

 unzip test.ipa

2. 转到 “Framework” 目录或使用grep命令并搜索flutter

cd Payloads/test.app/framework

8种绕过iOS应用程序SSL Pinning的方法

 要求:

  • 一台移动设备 (Android/iOS) 通过蓝牙网络共享共享互联网。

  • 已越狱/未越狱的 iOS 设备

  •  MacBook

通过热点方法捕获流量的步骤

1.通过蓝牙网络共享共享互联网连接

打开移动数据 => 打开移动蓝牙 => 连接到 MacBook => 从移动设备的设置中打开蓝牙网络共享尝试在 MacBook 中浏览一些数据以确认蓝牙网络共享已正确完成)

2. 共享从 MacBook 到 iPhone 的互联网连接

在 MacBook 中,导航到系统偏好设置 =>  通用 =>共享 => 互联网共享

8种绕过iOS应用程序SSL Pinning的方法

8种绕过iOS应用程序SSL Pinning的方法

3. 在 iPhone 中到 Wifi => 连接到 Macbook 的 wifi

8种绕过iOS应用程序SSL Pinning的方法

(尝试在 iPhone 中浏览一些数据以确认此操作已正确完成)

4. 将iPhone流量转发到burpsuite

使用以下数据创建 pf.rules 文件

rdr pass on bridge100 inet proto tcp from any to any -> 127.0.0.1 port 8080

5. 运行以下两个命令

sudo pfctl -f pf.rules

8种绕过iOS应用程序SSL Pinning的方法

sudo sysctl -w net.inet.ip.forwarding=1

8种绕过iOS应用程序SSL Pinning的方法

6. 打开burpsuite中的support invisible proxy选项

打开burpsuite => Proxy => Options => Edit => Request handling => 开启support invisible proxy

8种绕过iOS应用程序SSL Pinning的方法

8种绕过iOS应用程序SSL Pinning的方法

7. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。

二、通过替换硬编码证书绕过SSL Pinning

某些应用程序使用硬编码证书在 iOS 应用程序中实现SSL Pinning。应用程序将检查证书是否匹配,然后仅将流量发送到服务器。

因此,我们将 iOS 应用程序中的硬编码证书替换为我们的burpsuite证书并重新安装该应用程序,这样我们就可以绕过固定。

让我们看看如何替换硬编码的证书

1.使用以下命令解压缩 IPA 文件。

 unzip test.ipa

8种绕过iOS应用程序SSL Pinning的方法

2. 转到二进制文件

cd /Payload/test.app

8种绕过iOS应用程序SSL Pinning的方法

3. 通过以下命令搜索硬编码证书

find . | grep .cer

8种绕过iOS应用程序SSL Pinning的方法

4. 将所有硬编码证书替换为你的BurpSuite证书

cp ~/Path_of_Your_burp_certificate ./Full_Path_Of_Hardcoded_Certificate

8种绕过iOS应用程序SSL Pinning的方法

5. 重新编译应用程序并通过 Cydia Impactor 安装应用程序

  • 压缩 Payload 文件夹,文件扩展名为 .zip。

  • 将上述压缩的 zip 文件重命名为 .IPA 文件扩展名。

  • 现在通过 Cydia impactor安装应用程序(它将退 出并在 iPhone 中安装应用程序)

6. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。

三、通过替换硬编码的 SHA 256 哈希来绕过 SSL Pinning

某些应用程序使用证书的硬编码哈希在 iOS 应用程序中实现SSL Pinning。大多数内置 Cordova 的应用程序都使用此技术来实现SSL Pinning。

因此,我们只需将 iOS 应用程序中的硬编码证书哈希值替换为我们的 burpsuite证书哈希值,然后重新安装应用程序。

让我们看看如何替换硬编码证书的哈希值

1.使用以下命令解压缩 IPA 文件。

unzip test.ipa

2. 转到以下位置并查找硬编码哈希,它可能也位于不同的位置,在我的情况下,它就在那里

cd /Payload/test.app/www/pinning/pinning.json

8种绕过iOS应用程序SSL Pinning的方法

3. 通过以下命令生成 burpsuite证书哈希

openssl x509 -inform DER -in cacert.cer -out cacert.crt

8种绕过iOS应用程序SSL Pinning的方法

openssl x509 -in cacert.crt -pubkey -noout |openssl pkey -pubin -outform der |openssl dgst -sha256 -二进制 |openssl enc -base64

8种绕过iOS应用程序SSL Pinning的方法

4. 通过编辑器将我们的哈希值替换为应用程序哈希值。

5. 重新编译应用程序并通过 Cydia Impactor 安装应用程序

  • 压缩 Payload 文件夹,文件扩展名为 .zip。

  • 将上述压缩的 zip 文件重命名为 .IPA 文件扩展名。

  • 现在通过 Cydia impactor安装应用程序(它将退出并在 iPhone 中安装应用程序)

6. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。

四、通过 SSL Kill Switch2 绕过 SSL 锁定

1.安装 SSL Kill Switch

2.下载 SSLLillSwitch deb 文件

https://github.com/nabla-c0d3/ssl-kill-switch2/releases

3. 通过以下命令将 deb 文件复制到您的 iPhone,然后输入默认密码“alpine”。

scp /Path_Of_Downloaded_deb_file root@your_iphon_ip:/private (要复制包的文件夹)

4. 下载 Debian 软件包和 Cydia Substrate PreferenceLoader

从 Cydia 下载它,希望它已经安装好了

5. 进行 ssh 连接并输入默认密码“alpine”

ssh root@iphone_ip

6. 输入以下命令安装 SSL kill Debian 软件包或从 filza 安装

dpkg -i ssl.deb

7. 前往设置并寻找SSL kill switch应用程序。

8种绕过iOS应用程序SSL Pinning的方法

8. 单击禁用 SSL 证书,所有应用程序的SSL Pinning都将被绕过。

8种绕过iOS应用程序SSL Pinning的方法

9. 从 iPhone 开始浏览应用程序,并观察流量将在 burpsuite中捕获。

五、通过 MITM 绕过 SSL 锁定

某些应用程序流量无法直接通过 burpsuite捕获,在这种情况下,MITM 会出现。我们可以使用 MITM 来捕获流量,然后使用 MITM 将其发送到 burpsuite,而不是通过 burpsuite捕获流量。MITM 还可以与 objection、Frida 脚本和其他工具一起使用。您还可以将 MITM 与objection、Frida 脚本等一起使用。它工作了很多次,在我的一个项目中,我尝试了很多绕过SSL Pinning,但没有任何效果,最后使用一个 Frida 脚本和 MITM,我能够捕获流量。

在 MacBook 中通过以下命令安装 mitmproxy

brew install mitmproxy

2. 在 iPhone 中下载 MITM 证书

3. 通过 USB 连接 iPhone 和 Macbook,然后输入以下命令

mitmproxy

8种绕过iOS应用程序SSL Pinning的方法

4. 在 iPhone 浏览器中输入以下命令

Mitm.it (下载 iOS 证书)

8种绕过iOS应用程序SSL Pinning的方法

5. 在 iPhone 上安装 MITM 证书

在 iPhone 中导航到设置 => 安装配置文件 => 设置 => 信任证书 => 证书信任设置 => 启用 mitmproxy

6. 输入以下命令以在浏览器中启动 mitmproxy。

mitmweb(mitm 在浏览器中自动打开)

8种绕过iOS应用程序SSL Pinning的方法

7. 设置 MITMProxy 以将流量从 MITM 转发到burpsuite

8. 输入以下命令

 mitmweb 网站

  1. 转到选项并单击“编辑选项”,然后单击“设置此配置”

8种绕过iOS应用程序SSL Pinning的方法

2. 搜索 mode 并在此处添加以下行

upstream:http://127.0.0.1:8888

8种绕过iOS应用程序SSL Pinning的方法

3. 搜索 ssl_insecure 并启用

8种绕过iOS应用程序SSL Pinning的方法

4. 在burpsuite中设置upstream proxy。

在模式中选择您为上游设置的burpsutie中的 IP 地址和端口号。

5. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。

六、通过objection绕过SSL Pinning

安装 Frida Server:

从 iPhone 打开 Cydia => 来源 => 编辑 => 添加 => https://build.frida.re => 搜索 =>frida =>安装

默认情况下,Frida 服务器在 iPhone 上运行,您无需每次都启动 Frida 服务器。

1.在 MacBook 中安装objection

sudo pip3 install objection

(注意* 使用objection时,请确保在设备中打开应用程序,否则objection将不起作用。)

2. 输入以下命令,将申请连接到objection并浏览申请。

objection --gadget package_name explore

8种绕过iOS应用程序SSL Pinning的方法

3. 运行以下命令以绕过 SSL 锁定

ios sslpinning disable

8种绕过iOS应用程序SSL Pinning的方法

4. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。

七、通过 Frida 绕过 SSL 锁定

1. 输入以下命令以绕过 SSL 锁定

frida -U -f package_name -l ssl.js --pause

U =>将连接的 USB 设备用作目标

F =>To 表示包名称

L =>加载脚本

ssl.js => 脚本

(根据您的 iOS 版本从代码共享下载脚本)

--pause =>强制 Frida 在注入脚本后 “不暂停” 应用程序执行。

通用脚本:

Java.perform(function () {    var SSLContext = Java.use('javax.net.ssl.SSLContext');    var TrustManager = Java.use('javax.net.ssl.X509TrustManager');    // 创建一个信任所有证书的TrustManager    var TrustAllCerts = Java.registerClass({        name: 'TrustAllCerts',        implements: [TrustManager],        methods: {            checkClientTrusted: function (chain, authType) {},            checkServerTrusted: function (chain, authType) {},            getAcceptedIssuers: function () {                return [];            }        }    });    // 替换默认的SSLContext    SSLContext.init.overload('javax.net.ssl.KeyManager[]', 'javax.net.ssl.TrustManager[]', 'java.security.SecureRandom').implementation = function (keyManagers, trustManagers, secureRandom) {        console.log('Bypassing SSL Pinning');        this.init(keyManagers, [TrustAllCerts.$new()], secureRandom);    };});

2. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。

八、通过 Info.Plist 修改绕过SSL Pinning

一些应用程序在 Info.Plist 文件中定义固定规则并设置布尔值。我们可以将这些布尔值从 true 修改为 false 并绕过SSL Pinning。

转到 IPA 文件的二进制文件,然后打开 Info.plist 文件。

数据存在且键值对,搜索关键字,如:

  1. <key>TSKEnforcePinning</key><key>NSRequiresCertificateTransparency</key> 

将这些值从 true 更改为 false,然后重新安装应用程序。

开始从 iPhone 浏览应用程序并观察流量是否会被捕获在burpsuite中。

原文始发于微信公众号(赛哈文):8种绕过iOS应用程序SSL Pinning的方法

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月22日11:33:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   8种绕过iOS应用程序SSL Pinning的方法https://cn-sec.com/archives/3424196.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息