app攻防系列4-记一次绕过证书检验的抓包
免责声明
由于传播、利用本公众号所发布的而造成的任何直接或者间接的后果及损失,均由使用者本人承担。LK安全公众号及原文章作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢大家!!!
请勿利用文章内的相关技术从事非法测试,由于传播,利用此文所提供的信息而造成的任何直接或者间接的后果与损失,均由使用者本人负责,文章作者不为此承担任何责任
0x01 前言
随着现在攻防环境的升级,app渗透也成为了越来越多网络安全从业者关注的重点,故此推出app渗透系列。

一、抓包本质是什么?
当我们开 VPN / Charles / Burp 抓 HTTPS,本质是:做一次「中间人攻击(MITM)」流程如下
1.App 访问 https://api.xxx.com
2.拦截
3.攻击者伪造一个证书给 App
4.App 和攻击者建立 TLS
5.攻击者再和真正服务器建立 TLS
6.攻击者在中间解密数据
关键在:攻击者必须能解密 TLS 数据
而 TLS 的安全性来自:
-
公钥
-
私钥
-
证书签名链
如果攻击者没有私钥,就无法解密
二、证书校验为什么会失败?
当攻击者做 MITM 时:服务器真实证书:A;攻击者签发的中间人证书:B
App 会验证:
服务器证书是否是我信任的?
这时攻击者抓包就失败。
三、已经 hook 了很多库,为什么还不行?
在第一步时已经hook了:OkHttp,WebView,Xutils,Trustkit,Cronet,Apache HttpClient;这些都属于:上层网络库
但是现在有个问题问题是:如果目标 App:自己写了 TLS 验证逻辑或直接调用系统底层加密库或 JNI 调用 native 层 OpenSSL或做了二次校验
那么hook 的第三方库就失效了
四、TLS 验证真正发生在哪里?
不管用什么库,最终一定会走到:
Android 标准加密实现:
javax.net.sslcom.android.org.conscryptOpenSSL
真正的证书校验发生在:
TrustManagerImpl.verifyChain()
或者
OpenSSLSocketImpl.verifyCertificateChain()
或者 native 层
libssl.so
所以如果:上层没命中/混淆了/自定义实现,那最终一定会走到底层加密实现。
五、为什么最后要 hook 标准加密库 API?
不管 App 用什么网络库,最终都要走 TLS 验证;hook 底层相当于:在“终极验证入口”直接放行
hook标准加密库的脚本之前已经实现了,直接贴进来就ok,然后继续用frida去hook,使用app弹出的关键字与堆栈当中的信息去做对比

成功对比到一处 在堆栈中发现check$okhttp

所以在第一步没有hook到的原因就是这里的证书检测方法是check$okhttp,而原来的脚本中hook的是check方法

hook check$okhttp方法

此时已经成功绕过证书检测
抓到请求的数据包

广告时间-LK网安学院-漏洞实战挖掘与渗透测试课程持续更新中!!
价格1000出头!课程内容覆盖企业赏金SRC、众测赏金、CNVD、Edusrc、网安岗入职技能培训等~~
课程优势
该课程集合了讲师多年的漏洞挖掘/渗透测试/工作经验,旨在让各位同学用最短的时间,最快的速度挖到人生第一洞;让只会打靶场,挖不到漏洞或者在实战中没有挖洞思路的同学挖到人生第一洞;让只会挖公益漏洞挖不到赏金漏洞的同学挖到人生第一桶金;让认真付出愿意报名的学员真正的学会技术;一次报名即可永久学习,并且赠送永久纷传圈子
往期学员成果汇报
众多学员入职小米/长t/安h/奇安x/绿m等互联网或网安大厂;众多学员成功挖到人生第一桶金/人生第一洞
























技术交流/加群聊/课程咨询

技术群聊已满200人 群内各种福利 欢迎各位师傅进群交流

夜雨聆风
