记一次APP双向认证抓包
字数 1395 2025-08-18 11:39:04

APP双向认证抓包突破指南

一、双向认证概述

双向SSL认证(Mutual SSL Authentication)是一种安全机制,要求客户端和服务器端互相验证对方的证书。与单向认证(仅客户端验证服务器证书)相比,双向认证增加了服务器验证客户端证书的环节。

双向认证流程

  1. 客户端发起HTTPS请求
  2. 服务器返回其证书
  3. 客户端验证服务器证书
  4. 服务器要求客户端提供证书
  5. 客户端发送其证书
  6. 服务器验证客户端证书
  7. 验证通过后建立安全连接

二、判断双向认证的方法

  1. 常规抓包现象

    • 开启代理后APP提示网络异常
    • Burp Suite等工具只记录到请求包而没有响应包
    • 错误信息:"400 No required SSL certificate was sent"
  2. 排除SSL Pinning

    • 使用ssl-kill-switch2等工具绕过证书固定后
    • 仍然出现上述400错误,基本可确认是双向认证

三、突破双向认证的技术路线

1. 获取客户端证书

  • 解压APP文件(.ipa或.apk)
  • 在payload目录中查找.p12或.cer等证书文件
  • 常见证书命名:client.p12, cert.pem等

2. 获取证书密码

证书通常有密码保护,获取方式包括:

方法一:静态分析

  1. 对APP进行砸壳(iOS)或反编译(Android)
  2. 使用IDA Pro等工具分析二进制文件
  3. 在字符串中搜索证书文件名或关键词(如"client")
  4. 跟踪相关代码找到硬编码的密码

方法二:动态调试

  1. 使用Frida或Xposed框架hook证书加载函数
  2. 捕获密码输入或解密过程

方法三:流量分析

  1. 捕获APP首次安装时的网络流量
  2. 可能包含证书下载和密码传输

3. 配置代理工具使用客户端证书

以Burp Suite为例:

  1. 导入客户端证书

    • 进入Proxy → Options → SSL Pass Through
    • 点击"Client SSL Certificates"的"Add"
    • 填写目标主机(如:*.example.com)
    • 选择.p12证书文件并输入密码
  2. 验证配置

    • 重新抓包测试
    • 成功时应有完整的请求和响应

四、高级技巧与注意事项

  1. 多证书处理

    • 某些APP可能使用多个证书
    • 需要为每个域名配置对应的证书
  2. 证书绑定检测

    • 即使配置了正确证书,APP仍可能检测代理环境
    • 需要配合其他绕过技术(如禁用证书固定)
  3. Android特殊处理

    • 可能需要将证书导入系统证书库
    • 使用Magisk模块或修改系统分区
  4. 证书有效期

    • 检查证书是否过期
    • 过期的证书即使密码正确也无法使用

五、防御措施(开发角度)

  1. 避免硬编码证书密码
  2. 实现证书动态获取机制
  3. 增加环境检测(如代理检测)
  4. 使用证书公钥绑定(Public Key Pinning)

六、参考工具列表

  1. 静态分析:

    • IDA Pro
    • Hopper
    • Jadx(Android)
    • otool(iOS)
  2. 动态分析:

    • Frida
    • Xposed
    • Cydia Substrate
  3. 抓包工具:

    • Burp Suite
    • Charles
    • mitmproxy
  4. 其他工具:

    • ssl-kill-switch2(iOS)
    • Objection(运行时分析)
    • apktool(Android反编译)

通过以上方法,可以有效突破APP的双向认证机制,为安全测试提供基础。请注意,这些技术仅应用于合法授权的安全测试。

APP双向认证抓包突破指南 一、双向认证概述 双向SSL认证(Mutual SSL Authentication)是一种安全机制,要求客户端和服务器端互相验证对方的证书。与单向认证(仅客户端验证服务器证书)相比,双向认证增加了服务器验证客户端证书的环节。 双向认证流程 客户端发起HTTPS请求 服务器返回其证书 客户端验证服务器证书 服务器要求客户端提供证书 客户端发送其证书 服务器验证客户端证书 验证通过后建立安全连接 二、判断双向认证的方法 常规抓包现象 : 开启代理后APP提示网络异常 Burp Suite等工具只记录到请求包而没有响应包 错误信息:"400 No required SSL certificate was sent" 排除SSL Pinning : 使用ssl-kill-switch2等工具绕过证书固定后 仍然出现上述400错误,基本可确认是双向认证 三、突破双向认证的技术路线 1. 获取客户端证书 解压APP文件(.ipa或.apk) 在payload目录中查找.p12或.cer等证书文件 常见证书命名:client.p12, cert.pem等 2. 获取证书密码 证书通常有密码保护,获取方式包括: 方法一:静态分析 对APP进行砸壳(iOS)或反编译(Android) 使用IDA Pro等工具分析二进制文件 在字符串中搜索证书文件名或关键词(如"client") 跟踪相关代码找到硬编码的密码 方法二:动态调试 使用Frida或Xposed框架hook证书加载函数 捕获密码输入或解密过程 方法三:流量分析 捕获APP首次安装时的网络流量 可能包含证书下载和密码传输 3. 配置代理工具使用客户端证书 以Burp Suite为例: 导入客户端证书 : 进入Proxy → Options → SSL Pass Through 点击"Client SSL Certificates"的"Add" 填写目标主机(如:* .example.com) 选择.p12证书文件并输入密码 验证配置 : 重新抓包测试 成功时应有完整的请求和响应 四、高级技巧与注意事项 多证书处理 : 某些APP可能使用多个证书 需要为每个域名配置对应的证书 证书绑定检测 : 即使配置了正确证书,APP仍可能检测代理环境 需要配合其他绕过技术(如禁用证书固定) Android特殊处理 : 可能需要将证书导入系统证书库 使用Magisk模块或修改系统分区 证书有效期 : 检查证书是否过期 过期的证书即使密码正确也无法使用 五、防御措施(开发角度) 避免硬编码证书密码 实现证书动态获取机制 增加环境检测(如代理检测) 使用证书公钥绑定(Public Key Pinning) 六、参考工具列表 静态分析: IDA Pro Hopper Jadx(Android) otool(iOS) 动态分析: Frida Xposed Cydia Substrate 抓包工具: Burp Suite Charles mitmproxy 其他工具: ssl-kill-switch2(iOS) Objection(运行时分析) apktool(Android反编译) 通过以上方法,可以有效突破APP的双向认证机制,为安全测试提供基础。请注意,这些技术仅应用于合法授权的安全测试。