一键生成安卓证书_突破安卓7.0以上版本WX小程序抓包篇

       工作上经常需要使用brupsuite抓取APP和WX小程序的包,所以会在安卓上安装burp的证书。但是你会发现安卓7.0之后有了network-security-config这个选项,可以让app只信任系统证书,这样的话即使你安装了用户证书也无法进行抓包,而且各大应用市场已经在强制使用该选项了,可以预见这是个趋势。注意这里只针对安卓,苹果据说可以,但我没试过!

        刚开始看文章说可以使用低版本的微信进行抓包,但是实验后发现低版本微信已经不能使用,更别说抓包了!

       不过找到了问题的根源:在Android7.0及以上的系统中,每个应用可以定义自己的可信CA集,默认情况下,应用只会信任系统预装的CA证书,而不会信任用户安装的CA证书。而回想我们抓包的过程,无论是fiddler还是burpsuite,想抓https,都必须手机安装对应的证书,通过fiddler/burpsuite安装的证书恰恰正属于用户安装的CA证书,因此会被视作不安全的证书。

所以这里有两个解决方案:

(1)修改APP配置文件,直接修改APP的android:networkSecurityConfig属性,前提是可以获取到APP的源码。然后重新打包抓包就好了。

(2)方案一虽可行,但是作为渗透测试人员,往往没有源码权限,而这时候就需要把证书安装到系统证书里面,但是这个操作需要root权限。这里主要讲的就是第二个方法!流程就是"手机root+在Android中安装根证书+突破SSL pinning"

一、至于手机如何root,这里我只强调:先刷第三方recovery,然后使用各种root软件,例如(kingroot,root精灵和奇兔刷机等)

二、在Android中安装根证书

条件:

(1)Android 4.4及以上

(2)手机已经root,则可以安装为系统证书,否则只能安装用户证书,区别在于:用户证书会要求手机必须有锁屏密码

(3)adb连接手机正常

adb连接如下图所示:

a3a61ef92704b7d55e8989485fbf48ca.png

安卓系统证书的目录是:/system/etc/security/cacerts/,每个证书的命名规则为:.,Certificate_Hash表示证书文件的hash值,Number是为了防止证书文件的hash值一致而增加的后缀,一般为0。

我们通常burpsuite的证书后缀为der、cer或者pem,所以需要把证书文件转换为Android可识别格式

确定文件名。我这里安装了两个不同工具的证书,它们的证书格式不同,因此使用的命令也略有不同。

openssl x509 -inform DER -subject_hash_old -in burp.cer(这里der和cer格式都可以)

293281938c526d90f674edd915f0c68b.png

openssl x509 -inform PEM -subject_hash_old -in littleproxy.pem

把输出的第一行的8位hex字符串保存下来,比如269953fb,最终的证书文件名则为269953fb.0

转换证书文件格式

openssl x509 -inform DER -in burp.cer -text > 269953fb.0

bafa9889319111398dd2e57b323d711a.png

openssl x509 -inform PEM -text -in littleproxy.pem > 4bb9877f.0

编辑输出的文件,把"-----BEGIN CERTIFICATE-----"到文件结束这部分移动到文件首部

安装证书。

把证书文件复制到手机内部存储。adb push后第一个参数是证书文件在电脑上的路径,第二个是手机内部存储的路径

adb push path/to/269953fb.0 /sdcard/

9b5cd15ff22d201946d65500aa50c2ac.png

从内部存储复制到系统证书目录。adb shell启动命令行交互,su获取超级用户权限,mount将/system目录重新挂载为可读写,最后执行复制

adb shell

su

mount -o remount,rw /system   挂载

cp /sdcard/269953fb.0 /system/etc/security/cacerts/

修改文件权限

cd /system/etc/security/cacerts/

chmod 644 269953fb.0

cae1bfbe3910dab2000fd47b81729c47.png

挂载和复制证书到系统目录总是提示root权限不足,这个时候可以下载个re文件管理器,根目录下挂载为可读写,然后复制就可以了

用ls命令检查文件权限是否正确。下面一行是期望的输出。

ls -alZ

aa8acdf14191c4362a2b8481711039f2.png

重启设备,打开“设置->安全和隐私->凭据存储->系统”可以查看安装的证书。

但是抓包会发现,在Android 7以上,即使你把burp的自定义证书添加进系统证书里,这个证书也是不工作的。原因是chrome从2018年开始只信任有效期少于27个月的证书,具体参考:

https://www.entrustdatacard.com/blog/2018/february/chrome-requires-ct-after-april-2018

,而我们的burp发行的root证书有效期是2014年到2038年,当burp使用这个根证书发行各个网站的证书的时候,也会把有效期限设置为2014到2038,导致chrome判定这个证书无效。所以解决的办法是我们自己做一个两年的root证书导入burp。下面来介绍如何生成root CA证书:

(1)生成密钥

openssl genrsa -out key.pem 3072 -nodes

提示权限不足,系统管理员启动cmd

e884d6fd557ab03adf13951e6980b644.png

95b0f24b99f566b409940dbcc8e0fdb9.png

下载openssl.cnf并使用如下命令生成证书:

openssl.cnf链接:

https://gist.github.com/nevermoe/f1a4bbcd9cf76143e9520c717caff306

openssl req -new -x509 -key key.pem -sha256 -config openssl.cnf -out cert.pem -days 730 -subj "/C=JP/ST=/L=/O=nevermoe/CN=MiTM CA"

报错的话按照如下修改:

6be0fe0e861c1e8ccd7f567696c0d4a7.png

把密钥和证书导出成pfx格式

openssl pkcs12 -export -inkey key.pem -in cert.pem -out cert_and_key.pfx

这里要输密码,记得一定要设置!

把cert_and_key.pfx导入burp

dfea85879cb090e0ddad91059ebb989e.png

434033ad85d750eff4479f19ecef2688.png

最后再按照前面导入安卓手机的方法把根证书cert.pem保存到安卓里。

其实这个时候一些安卓应用已经可以抓包,但是微信小程序还是不行!原因可能是微信会去检测无线的状态,代理模式下没有网络!

这个时候其实就是该如何突破ssl pinning

需要做两步操作

1.安装Xposed框架,下载链接网上自己去找

第一次打开时,“框架”下面会有红色字体提示更新,不要管,点击框架,进去,点击“安装更新”,更新完成后,会提示重启,注意这个时候可能会卡死。如果卡死了,直接关闭,重新打开即可,再次进入框架页面,可以看到如下信息,则说明更新完成。

2c12e74f5d028bac593f3e1bc14cc36b.png

安装JustTrustMe

https://github.com/Fuzion24/JustTrustMe/releases/tag/v.2 (注意选择APK版本)

点击“模块”,此时还没有可用的模块, 导入之前下载好的JustTrustMe的apk安装包安装,安装完成后,手机重启后,再次打开框架“模块”界面,即可看到JustTrustMe,勾选一下,启用这个模块:

手机微信打开一个WX小程序,看抓包工具中是否可以正常解析HTTPS报文。可以看到抓到了

feaeaba86d55da3ef9e113884c46ddc3.png

参考文章:

https://www.jianshu.com/p/f547b05a5335

https://www.nevermoe.com/2018/11/20/openssl命令整理/

https://segmentfault.com/a/1190000017035564

https://blog.csdn.net/wlwh90/article/details/45561679

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值