×

双向证书校验bypass
  

新手032448 4498

{{ttag.title}}
*随着移动应用的发展和推广,APP应用安全越来越受到重视。APP中各类防抓包的机制的出现,让测试无法正常进行分析。
这篇文章算是总结一下我最近遇到的一款抓不到包的APP,给大家提供一个双向证书认证应该如何解决的思路。**

判断证书双向认证
刚拿到此app时候常规方法一把梭,发现只要一开启手机代理,却提示网络异常,通过观察burpsuite的记录发现,只有请求包而没有响应包。
直觉告诉我应该是使用SSL Pinning防止中间人拦截攻击,然后我开启了ssl-kill-switch2后发现该APP所有的响应包返回 400 No required SSL certificate was sent的报错信息。
根据报错提示,搜了一下发现该错误是指服务器端启用了证书双向认证。

当服务器启用了证书双向认证之后,除了客户端去验证服务器端的证书外,服务器也同时需要验证客户端的证书,也就是会要求客户端提供自己的证书,如果没有通过验证,则会拒绝连接,如果通过验证,服务器获得用户的公钥。

该app直接封装了客户端的证书,相比于单项认证,无非就是多了一个服务器端验证客户端证书的过程,而在以往的用代理工具如burp这类工具,抓取https的包时,除了浏览器获取的是代理工具的证书外,默认是不发送证书给服务器端的。burp在抓取https报文的过程中也提供了双向认证的证书发送,但是是使用了burp提供的证书文件,也就是CA证书。app的服务端不认证这个burp提供的CA证书,那么我们就需要拿到匹配的证书,以其对服务端进行匹配。

突破思路
确定该APP是证书双向认证,那么APP客户端一定会存一个证书文件。通过对该APP解压并进入payload目录,发现只有一个.p12结尾的证书文件。
尝试点开发现需要安装密码。

app解密的代码逻辑
客户端发送数据包以后,需要去从app中读取这个证书文件,密码是以硬编码形式放在了代码中,利用这个代码中的密码字段去解密证书文件,从中读取以后,再进行解密并回传给服务器端进行确认。由此推断,寻找证书名称应该就可以拿到安装密码。

获取安装证书密码
首先对其APP进行砸壳,完成后我们解压缩然后使用IDA加载二进制文件。
然后在String窗口搜索证书的名称client,搜索后进入对应的类。
通过跟踪发现了该证书密钥,如下:
测试使用该密钥发现可以成功安装该证书:

burp添加客户端证书
host填写app服务端的主域名。
随后选择app客户端内的client.p12证书文件,并输入安装密码。
证书成功导入,勾选即可使用。
ok~发现可以正常抓包,如下。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

新手912522 发表于 2020-10-18 00:33
  
感谢分享
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
每日一问
干货满满
【 社区to talk】
新版本体验
技术笔记
功能体验
产品连连看
技术咨询
GIF动图学习
标准化排查
2023技术争霸赛专题
每周精选
通用技术
信服课堂视频
秒懂零信任
自助服务平台操作指引
安装部署配置
排障笔记本
答题自测
原创分享
升级&主动服务
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
高频问题集锦
全能先锋系列
云化安全能力

本版达人

新手68983...

本周分享达人

零和一网络

本周提问达人