跳过内容

MASTG-TECH-0109: 拦截 Flutter HTTPS 流量

Flutter 是一个由 Google 创建的开源 UI 软件开发工具包 (SDK)。它用于从单个代码库构建移动、Web 和桌面平台的原生编译应用程序。Flutter 使用 Dart,Dart 不支持代理,并且使用自己的证书存储。Flutter 移动应用程序不使用系统的代理配置,而是将数据直接发送到服务器。连接会针对内置证书进行验证,因此系统上安装的任何证书都会被忽略。这使得通过标准的 MiTM 设置拦截 HTTPS 请求成为不可能,因为代理的证书永远不会被信任。

要拦截来自 Flutter 应用程序的 HTTPS 流量,我们必须处理两个挑战

  • 确保流量发送到代理。
  • 禁用任何 HTTPS 连接上的 TLS 验证。

通常有两种方法: reFlutter Android 的 Frida

  • reFlutter:此工具创建一个修改后的 Flutter 模块,然后将其重新打包到 APK 中。它配置内部库以使用指定的代理并禁用 TLS 验证。
  • Fridadisable-flutter-tls.js 脚本可以动态删除 TLS 验证,而无需重新打包。因为它不修改代理配置,所以需要额外的步骤(例如 ProxyDroid、DNS、iptables,...)。

使用 reFlutter 拦截流量

  1. 修补应用程序以启用流量拦截。

    运行命令以修补应用程序,然后选择选项流量监控和拦截,然后输入运行拦截代理的机器的 IP。

    $ reflutter demo.apk
    
    Choose an option:
    
        Traffic monitoring and interception
        Display absolute code offset for functions
    
    [1/2]? 1
    
    Example: (192.168.1.154) etc.
    Please enter your BurpSuite IP: 192.168.29.216
    

    这将在输出文件夹中创建一个 release.RE.apk 文件。

  2. 签名修补后的 release.RE.apk 文件(例如,使用 uber-apk-signer)。

    java -jar uber-apk-signer.jar -a release.RE.apk --out demo-signed
    

    这将在输出文件夹中创建一个 release.RE-aligned-debugSigned.apk 文件。

  3. 在移动设备上安装签名的修补应用程序。

  4. 配置拦截代理。例如,在 Burp Suite

  5. 在 Proxy -> Proxy settings -> Add new Proxy setting 下。

  6. 将监听端口绑定到 8083
  7. 选择 Bind to addressAll interfaces
  8. 请求处理 -> 支持隐形代理。

  9. 打开应用程序并开始拦截流量。

使用 ProxyDroid / iptables 和 Frida 拦截流量

您可以配置 ProxyDroid或创建 iptables 规则以将 HTTP 请求重定向到 Burp。

  • 如果您未使用 ProxyDroid,请在已 root 的 Android 设备上执行以下命令,以配置 iptables 以将来自应用程序的传入请求重定向到 Burp Suite

    $ iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination <Your-Proxy-IP>:8080 
    
    $ iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination <Your-Proxy-IP>:8080 
    
  • 配置拦截代理,如 Burp Suite

    • 在 Proxy -> Proxy settings -> Add new Proxy setting 下。
    • 将监听端口绑定到 8080
    • 选择 Bind to addressAll interfaces
    • 请求处理 -> 支持隐形代理。
  • 运行 disable-flutter-tls-verification Frida 脚本。

    $ frida -U -f eu.nviso.flutterPinning -l disable-flutter-tls.js
    
  • 使用应用程序,您应该能够拦截 Flutter 应用程序的 HTTP 流量。

有关此设置的更多说明,请参见 Nviso 的博客文章。