拦截绕过系统代理的移动应用流量
作者:Cameron Cartier 和 Dave Blandford
这是一份关于拦截基于Flutter构建的移动应用流量的可靠指南,这类应用历来特别难以拦截。所介绍的方法也应适用于其他类型的应用。在本文的前半部分,我们将讨论通过Mac上的互联网共享拦截iOS流量的方法。在后半部分,我们将展示如何使用HTTP Toolkit拦截已root的Android虚拟设备(AVD)的流量。
需要帮助进行root过程?您可以在此处查看Dave关于“如何root Android手机”的博客:https://www.blackhillsinfosec.com/how-to-root-android-phones/
用于iOS的互联网共享
警告:如果您不严格按照指定的每一步操作,您将花费数小时撞墙,以为自己疯了,因为昨天还能用,现在一切看起来都坏了,只是因为您忘记了一个步骤。问我怎么知道的。
要求:
- 一台已越狱的iOS设备(在运行iOS 16.5.1的iPhoneX上测试)
- MacBook Pro
- 一些连接两者的适配器组合
从计算机上,转到“设置”->“共享”->“互联网共享”。在切换此选项之前,点击右侧的信息图标。
这将带您到如下所示的菜单。
接下来,通过USB连接您的iOS设备。如果您使用像USBFlux这样的程序,这仍然应该有效。一旦您这样做,您应该看到上面显示的“iPhone USB”选项。将设置更改为从Wi-Fi共享到iPhone。这应与上面的截图匹配。此外,确保在手机上关闭Wi-Fi和任何其他网络接口。
这将在Mac上创建一个新的网络接口,如果您运行ifconfig
,它将显示。在我的情况下,新接口是bridge103。
要验证您感兴趣的流量现在是否可以从Macbook上看到,您可以运行:
|
|
您应该在使用iOS设备时看到流量。这表明您正在通过桥接接口成功与设备共享互联网。
接下来,在您喜欢的文本编辑器中打开pf.conf
文件:
|
|
添加以下行:
|
|
这必须添加在如下所示的确切位置(在rdr锚点之后,dummynet-anchor行之前),否则在运行下一个命令时会出现错误。
现在,使用以下命令刷新规则:
|
|
然后我们启用IP转发:
|
|
这应该将所有进入bridge103接口的流量转发到localhost:8889。现在我们将在该端口上启动一个Burp Suite监听器。
除了更改上面显示的主机和端口外,我们还需要启用对不可见代理的支持。不可见代理是一种非代理感知客户端或应用程序直接连接到Burp代理监听器的方法。这在请求格式不符合代理预期时很有用。更多信息可以在此Portswigger博客中找到。
这可以通过在“请求处理”选项卡下勾选一个框来启用。
就这样。您现在应该看到HTTP历史记录选项卡正在填充。
用于Android的HTTP Toolkit
对于不使用系统代理的应用程序,如Flutter应用,需要更多的关注和努力来捕获离开应用程序并前往后端服务器的流量。有许多解决方案可以捕获Flutter流量,但我发现的最简单的方法如下所述。
捕获流量
现在开始我们来的目的,捕获不使用系统代理的应用程序的流量。首先,下载HTTP Toolkit(https://httptoolkit.com/)。要将HTTP Toolkit与上游代理(如Burp Suite)一起使用,我们需要Pro版本。在本文发布时,Pro订阅费用为14.00美元(https://httptoolkit.com/get-pro/)。他们提供月度订阅,因此您可以在测试需要时根据需要开启或关闭Pro。
接下来,打开HTTP Toolkit。在“拦截”选项卡中,提供了要拦截的流量类型的选项。查看Android选项。
使用“通过ADB的Android设备”选项。此选项将设置从手机到HTTP Toolkit的VPN连接,捕获所有流量。
接受VPN请求后,您的设备将连接到HTTP Toolkit。因为HTTP Toolkit连接到已root的设备,它将自动在设备上安装证书。此外,HTTP Toolkit应用程序将安装在设备上。
要配置到Burp Suite(或您选择的黑客工具)的上游连接,导航到HTTP Toolkit内的“设置”选项。向下滚动到“连接设置”,选择“使用HTTP代理”。将值设置为您的Burp Suite实例IP地址和Burp正在监听的端口。例如:10.X.X.X:8080
Burp Suite CA证书需要加载在“受信任的CA证书”部分。在“加载CA证书”处上传您的.der证书。
现在导航应用程序。您应该在你的Web应用程序代理中捕获应用程序的流量。如果遇到错误,可能与证书固定或Flutter相关的东西有关,例如使用BoringSSL库(https://github.com/dart-lang/boringssl_gen)进行证书验证。需要额外的努力来绕过证书检查,本文未涵盖。
关于iOS和HTTP Toolkit的说明:在iOS上,HTTP Toolkit使用Frida挂钩到应用程序。该方法可以绕过一些证书固定实现,但不系统代理感知的应用程序需要另一种方法来捕获流量(如本文第一部分所述的方法)。HTTP Toolkit不会捕获在iOS上不系统代理感知的应用程序的流量。
总结
移动应用程序框架和技术总是在变化,这使得弄清楚如何代理流量变得极其困难。然而,这并非不可能,所演示的方法有望使其在Android和iOS设备上都不那么具有挑战性。
HTTP Toolkit是您工具箱中的一个很好的选择!如果您使用物理设备,您仍然可以使用ADB,无论是通过USB连接,还是对于Android 11及更高版本,通过无线连接。
此外,Jeroen Beckers在这一领域进行了一些伟大的研究,他的博客是移动测试——特别是测试Flutter应用程序——的一个很好的资源。因此,如果您在移动应用程序上遇到困难,他的博客是一个很好的资源(https://blog.nviso.eu/category/mobile-security/)。