HTTPS双向认证破解抓包

近段时间因为业务需要研究了下 HTTP + TLS的抓包,研究过程挺耗时耗力的,还好最后研究出来了,现在写文章记录一下整个过程。
实验环境为Android+SpringBoot 写的靶机,,生成证书为了简单一律用的jdk自带的Keytool生成,jdk要设置第三方安全库、需要添加bcprov-jdk15on-168.jar到jdk里并做一些设置,网上很多资料我这里就不详细叙述了。下面开始介绍了
#1.先介绍一下Android如何实现的TLS 的 SSL Ping证书绑定及解绑
Android端的证书一般放在assets文件夹下(也可以放在别处,反正只要放在本地就能找到,如果放在so文件里那需要另外处理,这就不详细介绍了),单向验证只需一个证书。
图片.png
在初始化SSLContext 时把服务端的证书 放到TrustManagerFactory里
图片.png
图片.png
这样就完成了证书绑定(还有一种公钥绑定,就是把证书里的公钥拿出来与服务器的做验证)。
证书绑定后一般的抓包方式是抓不到的,即使机器上装了抓包工具的证书也会因为校验证书失败而且不返回数据。其实破解方法也很简单,就是hook到初始化SSLContext的地方把绑定的操作移除就行。下面是我的Xposed代码
图片.png
市面上有些工具是可以破解这个绑定的 像Xposed + JustMePlush 其实现原理与我写的代码差不多,JustMePlush源码在github上:https://github.com/OtherPart/JustTrustMe,有兴趣可以看下。
然后就能抓到对应的包了
图片.png

2.HTTP + TLS双向验证 及破解

双向绑定Android端需要两份证书
图片.png
这是获取对应的KeyManagerFactory和TrustManagerFactory
图片.png
然后在SSLContext初始化时把 两个证书管理器当做两个参数放进去
图片.png
到此双向认证就安卓端就实现了。
双向认证抓包工具需要配置相应的证书才能抓到包。
##下面介绍下配置过程,我这里用Burp Suite来演示(也可以用别的)

1.先设置 转发ip和port

图片.png
要与机器上设置的对应
图片.png

2. 设置证书

图片.png
上面写TLS 的验证域名
图片.png
图片.png
这个证书就是工程里的
图片.png
这个证书(其实也可以把xx.bks证书转成xx.p12证书,然后上传这个证书的)
图片.png
这里输入证书的密码,这个密码可反编译目标apk在里面找
图片.png
这是我用jadx反编译apk,在里面找到的密码。
添加证书,成功后是这样的
图片.png
这就是刚才添加的证书
图片.png
所有操作做完了,下面看下效果

3. 看下抓包效果

图片.png
成功抓到包了。
#############分割线
操作做完后说些别的。其实研究的整个过程踩坑多的,光生成证书 保证证书能用都走了好多弯路。一开始准备用let’s encrypt 生成证书的,但很难转成安卓所需要的bks格式,而且SpringBoot 用起来也不方便,最后转向用jdk带的keytool来生成,不过keytool生成的证已尽并不是ca证书,会被浏览器警告。keytool生成证书后 转bks证书里 jdk里还需要添加第三方安全库bcprov-jdk15on-168.jar,也有另一个转换工具但用起来也没那么好。
整个过程有很多细节没写,如果需要的话可以在下面留言.

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值