一个flutter框架的App渗透日记
字数 1510 2025-08-30 06:50:11

Flutter框架App渗透测试实战指南

1. 背景介绍

本文记录了一个针对Flutter框架开发的移动应用程序的渗透测试过程。该App最初表现为无法正常抓包,经过一系列分析后发现其使用了深信服SDK进行内网通信。本文将详细讲解整个渗透测试流程,包括遇到的问题、解决方法和最终发现的安全隐患。

2. 初始测试环境准备

2.1 代理设置尝试

  • 使用Clash开启全局代理进行抓包测试
  • 发现验证码未加载,怀疑App检测代理软件
  • 尝试使用Clash透明代理将防火墙转发流量

2.2 初步抓包结果

  • 成功抓到数据包但无法正常通信
  • 数据包结构异常简单,不像典型App构造的请求
  • 关键特征:特殊的User-Agent标识

3. Flutter框架识别与分析

3.1 Flutter特征识别

  • 通过User-Agent信息确认是Flutter框架开发的App
  • 检查so库特征(如libflutter.so)进一步确认

3.2 源码分析挑战

  • App源码进行了高强度混淆(未加壳但混淆效果显著)
  • 尝试关键词搜索(okhttp、libssl.so、JSON等)无果
  • 无法找到与Dart发出请求相关的信息

4. Flutter抓包解决方案

4.1 SSL Bypass尝试

  • 参考网上Flutter分析文章(如https://www.ctfiot.com/217117.html)
  • 获取so的ssl bypass hook函数
  • 初始hook测试失败

4.2 成功解决方案

  • 使用GitHub项目frida-flutterproxy(https://github.com/hackcatml/frida-flutterproxy)
  • 该脚本通过SO文件内存解析获取导出地址进行操作
  • 成功实现抓包自由

5. 内网地址发现与处理

5.1 内网通信发现

  • 抓取的请求目标是内网地址
  • 使用mitm将内网地址替换为已知公网地址
  • 成功获取验证码并登录系统

5.2 WebView请求分析

  • App核心业务使用内置H5应用
  • WebView发起的请求无法通过Flutter hook捕获
  • 使用Frida hook WebView调试功能:
Java.perform(function () {
    var WebView = Java.use('android.webkit.WebView');
    
    WebView.$init.overload('android.content.Context').implementation = function (a) {
        console.log("WebView.$init is called!1");
        var retval = this.$init(a);
        this.setWebContentsDebuggingEnabled(true);
        return retval;
    }
    
    WebView.$init.overload('android.content.Context', 'android.util.AttributeSet').implementation = function (a, b) {
        console.log("WebView.$init is called!2");
        var retval = this.$init(a, b);
        this.setWebContentsDebuggingEnabled(true);
        return retval;
    }
    
    WebView.$init.overload('android.content.Context', 'android.util.AttributeSet', 'int').implementation = function (a, b, c) {
        console.log("WebView.$init is called!3");
        var retval = this.$init(a, b, c);
        this.setWebContentsDebuggingEnabled(true);
        return retval;
    }
    
    WebView.setWebContentsDebuggingEnabled.implementation = function () {
        this.setWebContentsDebuggingEnabled(true);
        console.log("setWebContentsDebuggingEnabled is called!");
    }
});

6. 深信服SDK分析

6.1 SDK特征识别

  • 请求中存在"SanforidClient"标识
  • App组件包含大量深信服SDK

6.2 认证信息获取

  • 通过分析SDK源码找到认证方法
  • 成功获取VPN用户名、密码和服务器地址
  • 可成功拨入VPN

7. 技术总结

7.1 抓包失败原因

  • App使用深信服SDK进行通信
  • 流量通过socket或回环接口转发
  • PC无法直接访问内网地址导致抓包后仍无法通信

7.2 Flutter渗透关键点

  1. User-Agent和so库是识别Flutter应用的关键特征
  2. 高强度源码混淆是常见防护手段
  3. 需要特殊工具处理Flutter的SSL/TLS通信

7.3 深信服SDK渗透经验

  • 关注"SanforidClient"等特征字符串
  • 检查App中是否内置默认VPN凭证
  • SDK可能提供直接的内网访问通道

8. 防御建议

8.1 对开发者的建议

  • 避免在客户端硬编码内网地址
  • 不要内置默认VPN凭证
  • 对敏感信息进行有效保护

8.2 对安全人员的建议

  • 收集Flutter应用特征库
  • 建立常见SDK的识别方法
  • 准备针对不同框架的专用测试工具链

9. 参考资源

  1. Flutter抓包分析文章:https://www.ctfiot.com/217117.html
  2. frida-flutterproxy项目:https://github.com/hackcatml/frida-flutterproxy
  3. Flutter逆向分析工具集
Flutter框架App渗透测试实战指南 1. 背景介绍 本文记录了一个针对Flutter框架开发的移动应用程序的渗透测试过程。该App最初表现为无法正常抓包,经过一系列分析后发现其使用了深信服SDK进行内网通信。本文将详细讲解整个渗透测试流程,包括遇到的问题、解决方法和最终发现的安全隐患。 2. 初始测试环境准备 2.1 代理设置尝试 使用Clash开启全局代理进行抓包测试 发现验证码未加载,怀疑App检测代理软件 尝试使用Clash透明代理将防火墙转发流量 2.2 初步抓包结果 成功抓到数据包但无法正常通信 数据包结构异常简单,不像典型App构造的请求 关键特征:特殊的User-Agent标识 3. Flutter框架识别与分析 3.1 Flutter特征识别 通过User-Agent信息确认是Flutter框架开发的App 检查so库特征(如libflutter.so)进一步确认 3.2 源码分析挑战 App源码进行了高强度混淆(未加壳但混淆效果显著) 尝试关键词搜索(okhttp、libssl.so、JSON等)无果 无法找到与Dart发出请求相关的信息 4. Flutter抓包解决方案 4.1 SSL Bypass尝试 参考网上Flutter分析文章(如https://www.ctfiot.com/217117.html) 获取so的ssl bypass hook函数 初始hook测试失败 4.2 成功解决方案 使用GitHub项目frida-flutterproxy(https://github.com/hackcatml/frida-flutterproxy) 该脚本通过SO文件内存解析获取导出地址进行操作 成功实现抓包自由 5. 内网地址发现与处理 5.1 内网通信发现 抓取的请求目标是内网地址 使用mitm将内网地址替换为已知公网地址 成功获取验证码并登录系统 5.2 WebView请求分析 App核心业务使用内置H5应用 WebView发起的请求无法通过Flutter hook捕获 使用Frida hook WebView调试功能: 6. 深信服SDK分析 6.1 SDK特征识别 请求中存在"SanforidClient"标识 App组件包含大量深信服SDK 6.2 认证信息获取 通过分析SDK源码找到认证方法 成功获取VPN用户名、密码和服务器地址 可成功拨入VPN 7. 技术总结 7.1 抓包失败原因 App使用深信服SDK进行通信 流量通过socket或回环接口转发 PC无法直接访问内网地址导致抓包后仍无法通信 7.2 Flutter渗透关键点 User-Agent和so库是识别Flutter应用的关键特征 高强度源码混淆是常见防护手段 需要特殊工具处理Flutter的SSL/TLS通信 7.3 深信服SDK渗透经验 关注"SanforidClient"等特征字符串 检查App中是否内置默认VPN凭证 SDK可能提供直接的内网访问通道 8. 防御建议 8.1 对开发者的建议 避免在客户端硬编码内网地址 不要内置默认VPN凭证 对敏感信息进行有效保护 8.2 对安全人员的建议 收集Flutter应用特征库 建立常见SDK的识别方法 准备针对不同框架的专用测试工具链 9. 参考资源 Flutter抓包分析文章:https://www.ctfiot.com/217117.html frida-flutterproxy项目:https://github.com/hackcatml/frida-flutterproxy Flutter逆向分析工具集