fiddler:这个在windows下使用比较友好,这个是微软官方出的,对于植入证书和抓包展示比较方便,易上手
charles:全平台下面,不需要其他环境配置,安装即可使用,配置证书也比较方面,但是不免费,网上有不少研究破解的,特点可以抓取websocket流量而且可以编辑重发
burpsuite:全平台,需要java环境配置,需要手工植入证书,不免费,可以破解,这个对于安全专业人员比较算是神器,安全人员不会用这个可以认为没有入门
mitmproxy:python版抓包工具,没有界面,属于引擎类型,开源免费,可以基于这个做扫描器,上手成本比较高,但是会用了算是比较高手了
Yakit:国产抓包分析工具,有点类似于burp,打的旗号也是无缝替代,并且支持插件和编程,不过对我来说,burp的地位是无可替代的,用不习惯这个。
chrome插件:这个属于基于chrome环境编写的抓包工具,类似于开发者工具,但是可以根据自己的需求进行数据包修改,对于https无需证书植入,但是需要进行自研,曾基于这个抓包工具写了sql注入扫描插件,产出还行,几千块钱吧,缺点是会影响上网性能。
2、HTTP协议
(1)request请求方法
HTTP1.0 定义了三种请求方法:GET, POST 和 HEAD方法。
HTTP1.1 新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
HEAD方法主要是为了探索资源在不在,这个一旦批量出现很大可能是在扫描
PUT:PUT方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据。向服务器上传指定的资源。
注:一般情况下为了防止出现安全问题,只允许GET和POST方法即可
(2)HTTP请求头信息
Host 请求报头域主要用于指定被请求资源的Internet主机和端口。
User-Agent 请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。
Referer 包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本页面。当前请求的原始URL地址。
Cookie 是非常重要的请求头,常用来表示请求者的身份等。
(3)HTTP响应头信息
Allow 服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding 文档的编码(Encode)方法。
Content-Type 表示后面的文档属于什么MIME类型。
Set-Cookie 设置和页面关联的Cookie。
WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。
(4)HTTP的状态
HTTP协议是无状态的,所有有了会话的概念会话ID可以通过一种称之为Cookie的技术在请求消息中进行传递,也可以作为请求URL的附加参数进行传递。会话ID是WEB服务器为每客户端浏览器分配的一个唯一代号,它通常是在WEB服务器接收到某个浏览器的第一次访问时产生,并且随同响应消息一道发送给浏览器。
会话过程由WEB服务器端的程序开启,一旦开启了一个会话,服务器端程序就要为这个会话创建一个独立的存储结构来保存该会话的状态信息,同一个会话中的访问请求都可以且只能访问属于该会话的存储结构中的状态信息。
(5)抓包分析看啥-请求
(6)抓包分析看啥-响应码、页面内容
1xx:信息提示,表示请求已被成功接收,继续处理。
2xx:请求被成功提交。
3xx:客户端被重定向到其他资源。
4xx:客户端错误状态码,格式错误或者不存在资源。
5xx:描述服务器内部错误。
3、基于charles的WEB端抓包实战
先看下charles的界面,相对于bp来说UI比较漂亮
专有功能:小乌龟是龟速网络模拟,在测试中可以用得到
4、移动APP抓包实战
(一)证书锁定(SSL Pinning)
证书锁定(SSL/TLS Pinning)顾名思义,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。
证书锁定(SSL/TLS Pinning)提供了两种锁定方式:Certificate Pinning 和 Public Key Pinning
我们需要将APP代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性,因此我们移动端APP与服务端(例如API网关)之间的通信是可以保证绝对安全。但是CA签发证书都存在有效期问题,所以缺点是在证书续期后需要将证书重新内置到APP中。
公钥锁定则是提取证书中的公钥并内置到移动端APP中,通过与服务器对比公钥值来验证连接的合法性,我们在制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题。
(二)无证书锁定
无证书锁定的情况下,直接配置上电脑的IP即可抓包,需要注意的是处于同一个局域网,需要手机上安装charles的证书:
这样搞不定的话还需要将证书植入到根证书下面,可以按照如下方式进行:
1) 获取 Charles 证书放置在系统安装证书目录的文件名
openssl x509 -inform PEM -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem | head -1
根据以上命令可以获得类似 34a6819c 的字符串,加上 .0 就是文件名,完整文件名如下:
adb connect [ip]
adb root
adb remount
adb push charles-proxy-ssl-proxying-certificate.pem /system/etc/security/cacerts/34a6819c.0
chmod 644 /system/etc/security/cacerts/34a6819c.0
5)重启系统
(三)通过hook解除证书锁定
常用的hook工具有两个,一个xposed,一个fridra。
推荐使用fridra,xposed需要不断重启手机
pip install frida
pip install frida-tools
https://github.com/frida/frida/releases
下载android版本的server版本,注意需要选择和手机系统位数一样的包,解压后上传到手机里面
chmod +x frida
adb push ./frida /data/local/
首先可以看下手机的进程信息,看到以下信息说明安装成功了
https://github.com/WooyunDota/DroidSSLUnpinning
下载下来,使用frida家在js脚本。如注入到Via进程中,看日志也能看到已经做了相关函数的注入替换
5、微信小程序的抓包
这个的话可以直接使用电脑微信抓包处理,不用模拟器,看下面配置即可,微信小程序的app名称是WeChatAppEx,Action设置为proxy代理,这样就可以直接抓取小程序的数据包了
原文始发于微信公众号(YY的黑板报):数据抓包及分析实战-2
评论