一、前置知识

  • 默认你了解了HTTPS中间人攻击的流程,再来回顾一下这个图:
Untitled
  • 网络在传输过程中一般不会被监控解密,但是通过中间人进行攻击(也就是抓包)可以解密这个传输流程。
    • 其实如果不进行客户端安装证书,也是可以抓包的,但是没有信任的证书相当于就是在路由上走一次,并没有加解密过程,实际上还是客户端与服务器端进行加解密通信
  • 这个中间人自己生成的证书在中间进行加解密与双方进行通信。

二、核心知识点

2.1 证书安装

  • 了解了中间人的攻击流程,也就知道了关键是这个证书,证书被校验成功即可以进行双向的传输解密
  • 安卓7以后安装的证书是放在用户目录的,并不能被系统信任,所以无法加解密流量。
    • 大多数抓不到包的原因就是证书安装了,但是在用户目录
    • 解决方法:
      • 使用MT管理器 把用户目录的证书移动到系统证书目录(据说可以支持到安卓10)
        • 用户证书文件目录 /data/misc/user/0/cacerts-added/
        • 系统证书目录/etc/security/cacerts/
      • 2 由于 Android 10 采用了某些安全策略,将系统分区 /system挂载为只读,就算你 root 了也没用,无法写入系统分区也就无法导入系统证书
      • 3 修改源码默认信任用户证书(提供几个检测的源码定位代码)
        • /frameworks/base/core/java/android/security/net/config/NetworkSecurityConfig.java
        • /frameworks/base/core/java/android/security/net/config/XmlConfigSource.java
        • libcore/ojluni/src/main/java/java/net/NetworkInterface.java
        • libcore/ojluni/src/main/java/java/lang/System.java
  • 到此安装完证书 使用抓包工具(charles、fidder、Burpsuit等)就可以进行抓包了
  • 但是我们使用的证书是中间人的证书 不是服务器直接下发的证书  所以只能解决80%的HTTPS抓包问题。

三、SSLPinning环境下如何抓包

3.1 证书校验——SSL证书绑定

上文可以了解到从 HTTP 到 HTTPS 数据在传输过程中添加了一层 加密(SSL/TLS),让我们数据流量处于加密状态,不再是明文可见。一旦 app 校验了证书的指纹信息。我们的证书不再受信任了。自然而然就无法建立连接,所以必须想办法让 app 信任,才能继续抓包。当然这个分为两种情况:

3.1.1  客户端校验服务器端的证书

上篇文件提到了一个证书包含了很多信息,那么客户端校验的原理就是:在APP中预先设置好证书的信息,在证书校验阶段时与服务器返回的证书信息进行比较。

  • 一般会有以下整数的信息会被校验,每种校验的方式这里就不展开了,下一篇文件在详细研究。
  • 公钥校验
  • 证书校验
  • Host校验
  • 如何绕过?
  • 因为本质上校验是在客户端中完成的,所以客户端中肯定会有相关的校验代码,我们找到校验的地方进行HOOK,使得校验的地方直接PASS。这里方法列举,暂时不展开,下一篇文件在详细研究。
  • frida hook
  • JustTrustMe(xposed的Hook脚本)

3.1.2 服务器端证书校验

在客户端放入证书(p12/bks),客户端向服务端发送请求时,携带证书信息,在服务端会校验客户端携带过来的证书合法性

  • 开发逻辑
  • 在APK打包时,将证书放入assets或raw目录
  • 在开发代码时,发送请求读取证书文件内容+证书密码 携带发送到服务器端
  • 解决方法
  • 找到证书文件(bsk/p12)
  • 通过hook获取证书相关密码
  • 将证书导入charles即可正常抓包
  • 在使用py构造请求时也需要携带这个证书和密码

四、禁用代理的场景

  • 现在的很多的app都是用禁止网络代理来防止抓包。在请求的时候都使用了Proxy.NO_PROXY
  • 解决方法:
    • 传输层的vpn进行流量转发
    • 使用charles + Postern
    • postern是在传输层久把流量转发指定的中间人(代理/抓包软件)
    Untitled
    • 不理解传输层什么意思? 稍后来填坑

五、自实现/自集成的SSL库

  • 通用hook 脚本或插件 覆盖不到
  • 暂时不展开

六、特殊框架 flutter 环境下如何抓包

  • 框架特点:自实现SSL库 + 单向证书绑定 + 禁用代理
  • 暂时不展开

七、非root环境如何抓包

  • 场景:应用对root环境进行校验
  • 暂时不展开

八、其他抓包技巧

扫码免费获取资源: