首选抓包工具是非常多的,抓包的手段也是非常多,在本文中主要是结合实际的使用场景和工作需要,选择较为常见的抓包方式和工具。同时,现在开发者的安全意识也是在逐步加强,对流量的保护上也是在下苦功夫,因此针对不同的保护选择不同的绕过方式。本文大致分为以下两个部分:1、抓包工具的使用和环境的搭建2、常见的绕过解决疑难杂症
参考:1、e8aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5P5W2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8Y4c8Q4x3V1j5$3y4e0f1I4就上面的参考文章中已经提到很多工具抓包,我这里就直接重复讲解,直接进入正题,我在抓包过程中经常使用的工具。
这个抓包工具相信都知道,可想而知其功能的强大,并且该工具的社区也是非常活跃,WEB必备工具之一,更新频繁。首选我们来介绍环境的搭建我喜欢使用Linux系统来搭建我的分析环境,当然其他环境下搭建是没有任何问题的。下载地址:771K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8%4N6F1i4K6u0W2y4e0u0H3L8$3A6A6k6g2)9J5k6h3y4F1i4K6u0r3g2r3!0G2L8s2y4Q4x3V1k6z5k6i4c8%4L8%4u0C8i4K6g2X3b7h3&6S2L8s2W2*7k6i4u0Q4x3V1j5`.至于版本可以根据自己的喜好来选择,尽可能的选择比较新的版本当然该项目是基于Java开发,那我们肯定需要使用到Java环境,首选对于我们开发人员来讲,可以直接使用JDK就可,笔者使用的JDK11版本 注:比较新的BP是需要JDK8以上,不太支持JDK8使用比较新的JDK版本还是有很多好处的,比如可以兼容JEB pro工具如下图是笔者使用版本简单的修改一下启动脚本就可以直接运行起来,非常方便 具体的注册方式在这里就不过多的讲解。接下来启动工具开始准备抓包环境
1、首选在Options中选择配置我们的代理2、设置端口3、配置代理服务的IP其中重要的是配置我们代理服务器的IP如果我们是本地抓包,那我们可以直接配置本地地址就可以,浏览器代理上这个IP便可以实现抓包。如果是借助路由器抓包,也就是手机或者其他设备抓包,只要处于同一局域网中,我们配置的IP就应该是本机的IP地址,然后被抓包的设备代理上就可以实现抓包。大致的结构图如下: 但是目前可能我们只讨论可以使用WIFI来进行上网服务的应用和设备,如果应用的流量是通过4G、网线上网那我们使用BP就不是这样来进行抓包,BP抓包的数据流量是位于应用层,如果是使用4G上网或者网线可能就需要借助接下来会介绍的TCPdump、wireshark等工具对网卡进行抓包分析。 随着HTTP进入到HTTPS时代,上面这样简单的配置是没有办法实现抓包的。我们用一张图片来解释HTTP->HTTPS的差异 HTTPS的实现就是在传输过程中添加了一个SSL/TLS环节,使得我们的传输的流量是处于加密状态。那是如何加密的呢?当然这里不是我们深入研究的主题实际上就是使用RSA、DES等加密方式,在网络建立之前会使用秘钥协商来商定对称加密的秘钥,通常秘钥协商是会使用RSA算法,或者其他非对称的加密算法来实现(比如蓝牙中的秘钥协商就不完全采用RSA),协商完成后我们就可以使用对称加密来进行加密我们的流量。(具体的原理这里就不展开分析,后面开文章进行单独讲解) 既然如此就引入了CA证书的概念证书的作用验证我们客户端和服务端,但是在很多开发者这里就不会很好的使用这样的机制,因此出现安全问题。相关的演变或者难易变化在第二节中讲解。
我们可以在配置好代理后直接访问aa3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0#2M7Y4m8Q4x3X3g2U0L8W2!0q4y4g2!0n7x3q4!0n7x3g2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4#2)9&6b7W2!0n7y4q4!0q4y4W2)9^5c8g2!0m8y4g2!0q4y4q4!0n7z5q4)9^5b7W2!0q4z5q4!0n7c8q4!0n7c8q4!0q4z5q4!0m8c8W2)9^5x3g2!0q4y4q4!0n7z5g2!0m8y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2!0n7z5g2!0n7y4W2!0q4z5g2)9^5x3q4)9^5z5g2!0q4y4W2)9^5b7W2!0m8z5g2!0q4y4g2!0m8c8g2)9^5z5g2!0q4z5q4!0m8x3#2)9^5y4g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4z5q4!0n7c8W2)9&6z5g2!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4g2!0m8c8g2)9^5z5g2!0q4z5q4!0m8x3#2)9^5y4g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4z5q4!0m8c8W2)9^5x3g2!0q4y4q4!0n7z5g2!0m8y4W2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4W2)9^5z5q4!0n7y4#2!0q4z5q4!0m8c8W2)9^5x3g2!0q4y4q4!0n7z5g2!0m8y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2!0m8y4W2)9^5x3W2!0q4y4W2)9&6c8g2)9&6b7#2!0q4y4W2!0n7x3W2!0m8x3g2!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4#2!0n7x3#2!0n7b7W2!0q4y4#2!0n7b7W2)9&6c8W2!0q4z5q4!0m8c8W2)9^5x3g2!0q4y4q4!0n7z5g2!0m8y4W2!0q4y4W2!0m8x3q4!0m8x3g2!0q4z5g2!0m8b7g2)9^5b7#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9^5x3#2)9^5y4g2!0q4y4g2)9^5y4W2!0n7y4g2!0q4y4q4!0n7z5q4)9^5b7W2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4g2!0m8c8g2)9&6c8g2!0q4y4#2)9^5c8g2!0n7x3q4!0q4y4g2!0m8y4q4)9&6b7h3S2@1N6s2m8K6i4@1f1$3i4@1t1#2i4K6R3I4i4@1f1&6i4K6R3%4i4K6S2r3i4@1f1$3i4K6S2m8i4K6V1K6i4@1f1#2i4K6S2o6i4K6R3#2i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1K6i4K6R3H3i4K6R3J5当然我们也可以直接导出证书文件,将证书放置在系统证书的目录下来实现抓包。 导出der文件,并不能直接用于Android系统安装,如果想要安装用户证书,可以导出.cer后缀安装,如果想安装系统证书,我们还需要对证书进行处理。我们可以去看一下我们的系统证书的格式是什么下图使用的是 nexus6p Android 8.1.0 如果想要转换成上面的形式,需要使用到openssl工具来进行转换,具体操作如下:如果我们导出为der文件,先将der转换成pem文件openssl x509 -inform DER -in burpder1545.der -out burpder1545.pem然后我们再计算我们的hash值openssl x509 -inform PEM -subject_hash_old -in xx.pem然后可以直接改后缀,也可以使用cat xx.pem > hash.0生成我们的证书文件注:这里的后缀是不一定为.0,如果出现hash值是一样的我们可以修改成.1、.2之类的。如果为其他类型的文件我们可以使用下面的命令转换openssl x509 -inform DER -subject_hash_old -in xxx.cer证书生成后我们需要放到系统证书目录下,如果是Android系统上,我们放置的位置是在system/etc/security/cacerts目录下通常我们系统没有root权限的情况下是没办法操作的。Android手机root情况下:1、可以尝试重新挂载系统分区mount -o remount,rw /然后再复制我们的证书就可以成功。但是也是有失败的情况。这个时候建议推荐使用第二种思路2、使用magisk插件root的手机上,我们是可以任意折腾的,站在系统的高度下看APP可谓是降维打击。4c3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2X3M7X3g2W2j5Y4g2X3i4K6u0W2j5$3!0E0i4K6u0r3j5i4u0@1K9h3y4D9k6i4y4Q4x3V1k6@1k6i4u0E0K9h3&6S2L8q4)9J5c8U0p5#2z5o6b7&6x3W2)9J5k6h3S2@1L8h3H3`.6c8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6y4j5h3N6A6M7$3E0Q4x3X3c8y4L8$3c8#2L8r3g2K6i4K6u0V1f1X3g2H3L8#2)9J5c8X3#2G2N6X3g2U0k6i4u0@1当然使用未root的手机上也是可以实现,只是复杂一点非手机设备上(比如车机、其他搭载Android系统的设备)在这样的情况下我们想要移动证书就显得局促。同样的使用Android手机端的第一种办法也是可以达到目的,前提是有root权限如果不能重新挂载Android系统的根目录,可能想要绕过校验系统证书抓包的方式就不太可能。但是想要抓取流量也是可以实现的,比如使用frida hook + tcpdump来实现https流量抓取。回归正题,在这里我们还是假设我们系统证书也是可以实现的,继续展开研究。既然证书已经安装完成,那我们如何抓取的https流量,充当中间人攻击的呢?我们还是用一张图片来解释这一个原理: 如果开发者没有足够的安全意识,我们在这里是可以抓取到https流量的。在后面的章节中会讲解详细讲解如何防护又如何破除防护。开始抓包抓包之前我们是需要设置设备上的代理情况的,需要将我们待抓包的设备连接上我们的代理服务器中。通常情况下我们有两种凡是来设置我们的代理:1、更改wifi的代理设置 修改网络中的高级设置,设置我们的代理。填入我们的代理IP和port就可以实现代理抓包。2、设置全局代理第二个方法设置全局代理,需要使用到如下的命令adb shell settings put global http_proxy 192.168.xx.xxx:8888这样设置全局代理效果和上面的手动设置是一样的效果。
Finder抓包原理上和burpsuite是相识的,具体的操作也是相似,可能差异就在使用上面。我们还是简单的把环境搭建代理抓包证书安全讲一下。在官网上我们可以看到fiddler支持多个系统,我们windows下为例进行安装。基本上就是next下去就行我们就直接安装证书,在点击Tools->option->https 就会给我们提示请求安装证书。设置连接 这里主要是配置我们的端口可以在我们的电脑中看到代理配置 fiddler已经将我们本地的代理给设置好了,现在本地的流量就是可以直接抓取。比如我们访问的流量 那我们如何去配置抓取移动设备的https流量呢?当然是需要配置证书。首选我们是需要让我们的设备连接上我们代理,设置代理的方法和上一个抓包工具是一样的。设置完成代理,我们可以在待抓包设备上访问http://ip:port的方式去下载我们的fiddler证书,进行安装即可。当然这里想要安装系统证书也是一样的方法。配置代理可以参考上一个工具的配置方法。
如果在上面的方法都不好使的情况下,我们可以采用TCPdump工具来进行流量分析,但是这种分析方法可能并没有上面的工具那么直接,需要借助wireshark工具来进行查看和分析。通常情况下,使用tcpdump抓https流量是出于加密状态的,我们也没办法像BP一样设置中间人代理,但也不是不能分析,只是相对来讲复杂一点。想要抓取https流量并且分析,这里推荐一种方法:90eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6@1K9s2u0W2j5h3c8Q4x3X3b7I4y4o6l9#2z5e0p5%4i4K6u0V1x3g2)9J5k6o6q4Q4x3X3g2Z5N6r3#2D9
在这一小节中主要就是从防护的难度从低到高进行讲解,攻防兼备。
这中情况通常是出现在测试版本中,为了方便开发者自己测试,发布版本中也不一定不存在这样的情况。忽略证书校验到底是什么意思呢?我们还是用图片的形式来进行说明。 那这样的情况下,https流量和http流量是一样的效果,实际上达到的效果是信任所有的证书。我们以okhttp为例:在okhttp中,默认是使用系统证书进行校验的。如果我们重写checkClientTrusted、checkServerTrusted、verify等方法,使其处理逻辑为空,便能够达到忽略证书校验的目的。
证书都忽略了,那我们想要抓包不是直接代理上就可以抓包嘛。不存在什么对抗之法。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!