Flutter框架APP绕过SSL验证
2024-11-26 17:1:0 Author: mp.weixin.qq.com(查看原文) 阅读量:0 收藏

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!

0x01 前言

之前听说过Flutter框架APP没有通用的抓包方案,但一直没找到相关APP进行测试,正巧手头遇到了一个APP尝试用了之前写的方法都抓不到包,所以联想到有可能使用了Flutter框架。

APP抓包姿势总结

记一次APP双向认证抓包

强混淆APP SSLPinning Bypass

0x02 Flutter介绍

Flutter是Google构建在开源的Dart VM之上,使用Dart语言开发的移动应用开发框架,可以帮助开发者使用一套Dart代码就能快速在移动iOS 、Android上构建高质量的原生用户界面,同时还支持开发Web和桌面应用。

0x03 Flutter特征

当使用Flutter构建Android APP时,lib文件夹下的每个受支持的架构下会出现两个库:libapp.so和libflutter.so,libapp.so库包含了开发过程中编写的所有编译过的Dart业务代码。libflutter.so库则存放了flutter的一些基础类库。

0x04 Flutter抓取HTTPS

使用正常抓包测试流程发现该类APP不走系统代理、不支持设置代理、不信任系统证书 后续了解才发现证书校验写死在SO文件里,所以导致JustTrustMe,SSLUnpinning等一些常规SSL绕过模块失效。通过配置postern代理发现报错如下。
通过搜索报错信息发现该错误提示指向Flutter框架的SSL证书验证。
HandshakeException: Handshake error in client (OS Error:
CERTIFICATE_VERIFY_FAILED: self signed certificate in certificate chain(handshake.cc:393))

正巧这次机会来了一探究竟。查找boringssl库中ssl里Handshake.cc,看到在392行包含执行证书验证的逻辑 之所以报错,可以看到是验证失败了

ret == ssl_verify_invalid
按照之前的方式hook函数返回值,但是后续发现hook该函数修改ret的值为ssl_verify_ok发现并不能成功绕过。问了下chatgpt发现可以hook session_verify_cert_chain函数

查找资料发现网上也有很多分析libflutter.so中ssl的文章,基本也是同一套方法。针对证书校验问题,利用Frida去hook libflutter.so中的ssl_client函数,然后回过头来分析下客户端,找到libflutter.so使用IDA打开app中的libflutter.so文件,打开后先转为字符串(view-open subviews-strings),然后搜索ssl_client


进入查看函数调用位置


查看该函数代码逻辑


sub_8695CB


确定目标函数


复制函数的前10个以上的字节,然后使用Frida脚本检测该模式出现的频率。如果只发生一次,说明找到该了函数,可以进行hook


下面就是编写frida脚本 https://github.com/G123N1NJ4/c2hack/blob/master/Mobile/flutter-ssl-bypass.md

function hook_ssl_verify_result(address{
    Interceptor.attach(address, {
        onEnterfunction(args{
            console.log("Disabling SSL validation")
        },
        onLeavefunction(retval{
            console.log("Retval: " + retval);
            retval.replace(0x1);
        }
    });
}

function hookFlutter({
    var m = Process.findModuleByName("libflutter.so");
    var pattern = "FF C3 01 D1 FD 7B 01 A9 FC 6F 02 A9FA 67 03 A9 F8 5F 04 A9 F6 57 05 A9 F4 4F 06 A9 08 0A 80 52 48 00 00 39";
    var res = Memory.scan(m.base, m.size, pattern, {
        onMatchfunction(address, size){
            console.log('[+] ssl_verify_result found at: ' + address.toString());
            // Add 0x01 because it's a THUMB function
            // Otherwise, we would get 'Error: unable to intercept function at 0x9906f8ac; please file a bug'
            hook_ssl_verify_result(address);
        },
        onErrorfunction(reason){
            console.log('[!] There was an error scanning memory');
        },
        onCompletefunction({
            console.log("All done")
        }
    });
}
function main({
    Java.perform(function(){
        hookFlutter();
    });
}
setImmediate(main);

加载执行js文件,发现返回正常提示

burp成功显示抓取的数据包

0x05 参考链接

https://blog.csdn.net/weixin_44777218/article/details/134029395 

https://mp.weixin.qq.com/s/Xc6Qmf4AAlp29JwvzF1-9A 

https://github.com/G123N1NJ4/c2hack/blob/master/Mobile/flutter-ssl-bypass.md

往期推荐

TscanPlus-一款红队自动化工具

潮影在线免杀平台上线了

自动化渗透测试工具开发实践

【红蓝对抗】利用CS进行内网横向

一个Go版(更强大)的TideFinger

SRC资产导航监测平台Tsrc上线了

新潮信息-Tide安全团队2022年度总结

记一次实战攻防(打点-Edr-内网-横向-Vcenter)

E

N

D


Tide团队产品及服务

团队自研平台:潮汐在线指纹识别平台 | 潮听漏洞情报平台 | 潮巡资产管理与威胁监测平台 | 潮汐网络空间资产测绘 | 潮声漏洞检测平台 | 在线免杀平台 | CTF练习平台 | 物联网固件检测平台 | SRC资产监控平台  | ......

技术分享方向:Web安全 | 红蓝对抗 | 移动安全 | 应急响应 | 工控安全 | 物联网安全 | 密码学 | 人工智能 | ctf 等方面的沟通及分享

团队知识wiki:红蓝对抗 | 漏洞武器库 | 远控免杀 | 移动安全 | 物联网安全 | 代码审计 | CTF | 工控安全 | 应急响应 | 人工智能 | 密码学 | CobaltStrike | 安全测试用例 | ......

团队网盘资料:安全法律法规 | 安全认证资料 | 代码审计 | 渗透安全工具 | 工控安全工具 | 移动安全工具 | 物联网安全 | 其它安全文库合辑  | ......


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247517365&idx=1&sn=7a0a543e42c346c148f59d45f9764fce&chksm=ce5da6d4f92a2fc2de9d600b823d193f53e32886d45b0ed763e6fe5839438f5c66155937d96b&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh