欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Https抓包总结

程序员文章站 2022-06-02 12:42:15
...

使用抓包工具burpsuite、fiddler等进行抓包,方法和原理类似,下面一burpsuite为例,https通信时,客户端需要获取服务器的证书进行验证,直接使用burpsuite抓取https的请求,会出现ssl协商错误。因为在抓包工具抓包过程中,抓包工具是作为一个中间人进行数据包拦截和转发,当进行https请求时,需要服务器的证书验证通过才能信任,同时正文的解***也是通过证书来协商的,而burpsuite没有证书,无法被浏览器信任,导致请求无法正常完成,因此需要导入burpsuite的证书到浏览器,让其信任burpsuite

电脑端浏览器抓包

  1. 开启burpsuite代理proxy,option
    Https抓包总结
  2. 将浏览器代理设置为上述ip和端口
    Https抓包总结
  3. 在浏览器中输入ip:端口,进入burpsuite证书下载界面,下载证书,然后安装证书
    Https抓包总结
  4. 开始抓https包:
    Https抓包总结

Android的https数据包抓取

安卓端同样可以采取上述的方法进行抓包,下载证书导入到手机中安装,将wifi代理设置为burpsuite中设置的ip和端口。

但是Android端有很多问题,在安卓6.0之前,应用默认是信任系统和用户的证书的,可以使用上述的方法,但是在7.0之后,默认是不信任用户证书。

Android7.0之后抓https包(已经root)

  1. 首先查看app是否信任系统证书。用apktool解包,找到network_cerxxx.xml文件,里面会写明所信任的对象,包括system和user。
  2. 如果只信任系统证书,那么我们可以将下载好的证书导入到系统目录下/system/ect/security/cacerts。系统证书的格式为hash.0,所以需要按这个格式修改证书。
  3. 如果下载的证书是pem格式:
openssl x509 -inform PEM -subject_hash_old -in PortSwiggerCA.pem | head -1

如果der格式:

openssl x509 -inform DER -subject_hash -in PortSwiggerCA.der | head -1

使用以上命令可以计算证书hash。

  1. 将证书放到指定目录下,然后重启:
> adb mount
> adb push xxxxx.0 /system/etc/security/cacerts
> adb remount
> adb reboot

将证书导入后即可抓去https包

Android7.0及以上,自定义的证书验证的https包抓取

这种情况就是应用开发者自己定义了证书验证方法

X509TrustManager.checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
//verify cert
			}

该应用及不信任系统证书也不信任用户证书。这时只能通过hook checkServerTrusted方法。
使用frida hook上述方法,直接返回,不做任何认证即可抓去https包。

  1. 使用jd-gui打开目标apk(自行百度如何将apk转为jar),全局搜索X509TrustManage做验证的地方,也就是checkServerTrusted实现的地方。
  2. 然后编写Frida注入的js脚本:
var hook = Java.use('xxxx') //xxx为checkServerTrusted所在的类名全称
hook.checkServerTrusted.overload('Lxxxxx', 'java.lang.String').implement(arg1, arg2) =
{
   return;
} 
//L后的xxx为X509Certificate类名全称

不会hook可以百度如何ook android app,之后会写blog介绍如何hook。

  1. 开启frida hook程序,打开应用开始抓包。