跳到主要内容

Fiddler抓包工具

前言

学习 Spring 实在有些厌烦了,感觉学来学去都是那些东西,基于上次写的刷票脚本想找一个新的方向进行拓展一下,开阔自己的眼界,借此国庆长假不妨尝试一些抓包、爬虫之类的东西 ~

概述

Fiddler 是位于客户端和服务端的 HTTP 代理,所以可以实现 HTTP 抓包,主要作用就是监控浏览器所有的 HTTP、HTTPS 流量,而之前踩的坑,开了全局代理脚本依然是真实 ip 的主要原因是因为这些浏览器会默认先读取系统代理,如果没有有系统代理才会走真实 ip

所以自己写的脚本应该手动挂代理才行

可以在 控制面板 --> Internal选项 --> 连接 --> 局域网设置 --> 高级 里面配置代理(不过默认设置 Fiddler 会在启动时自动打开代理)

常用操作

快捷键

删除除选中请求之外的请求:shift + delete 删除全部请求:ctrl + x

自动解码

工具栏的 Decode

编码工具

工具栏的 TextWizard 例如简单的文本转成 Base64

断点

1、全局断点:左下角 请求前断点:在发送到服务器之前

2、筛选断点:使用过滤器 这个断点可以拦截别人的请求,然后发送自定义的数据

3、命令断点:使用 bpubpafter 命令 例如:

# bpu 收到请求后中断响应
bpu 匹配的关键字

# bpafter 请求前的断点
bpafter 匹配的关键字

添加属性

参考文档 Add Columns to the Web Sessions List

例如:添加 ip 字段 菜单,Rules -> Customize Rules,打开“Fiddler ScriptEditor”

Ctrl+F查找 static function Main() 字符串,然后添加以下代码:

FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");

或者直接在属性标题右键就能弹出一个小菜单,选择自定义属性就行了

自动响应器

AutoResponder

就是把请求自动重定向到本地,返回一个本地的响应给这个请求

先添加一个规则(可以直接把请求列表的请求拖过来),可以在第二个框指定一个响应(或者响应一个指定的本地文件)

然后勾上下面的两项(第二个是放行没有匹配的请求) image.png

由此可见,如果连接公共场合的 WiFi 就可能给拦截重定向到他的本地 js,从而篡改数据

除了上面这些违法的请求,也可以做 mock 测试,就是没有做完的 api 可以重定向到本地获取假数据

发送请求

Composer

可以直接把请求列表的请求拖到这里,也可以手写

虽然这个 Fiddler 是用来抓包的,但是也能用于发送请求测试 相对 Postman 更加纯粹,直接编写请求头

弱网测试

按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外,弱信号的Wifi通常也会被纳入到弱网测试场景中。

就是对这种连接不强的(或者网速不好的)网络进行测试

image.png 设置网络限速

但是如果要改限速具体大小需要修改脚本(有点傻~)

在脚本处搜索 m_SimulateModem

image.png

在这里修改时间就行了

过滤器

这个没事好说,直接看页面就知道其功能

这里有个特色功能就是给匹配上的请求都加上某个请求头字段 image.png 下面的 set request header

过滤到指定的请求进行断点: image.png

HTTPS 抓包原理

就是中间人攻击

不同于简单的 Http 代理,HTTPS 服务需要权威 CA 机构颁发的 SSL 证书才算有效。自签证书浏览器不认,而且会给予严重的警告提示。而遇到 “此网站安全证书存在问题” 的警告时,大多用户不明白是什么情况,就点了继续,导致允许了黑客的伪证书,HTTPS 流量因此遭到劫持。

参考资料 Fiddler抓取https原理? - [已重置]的回答 - 知乎

首先 fiddler 截获客户端浏览器发送给服务器的 https 请求, 此时还未建立握手。

第一步, fiddler 向服务器发送请求进行握手, 获取到服务器的 CA 证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器 CA 证书公钥。

第二步, fiddler 伪造自己的 CA 证书, 冒充服务器证书传递给客户端浏览器, 客户端浏览器做跟 fiddler 一样的事。

第三步, 客户端浏览器生成 https 通信用的对称密钥, 用 fiddler 伪造的证书公钥加密后传递给服务器, 被 fiddler 截获。

第四步, fiddler 将截获的密文用自己伪造证书的私钥解开, 获得 https 通信用的对称密钥。

第五步, fiddler 将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任, 握手完成, 用对称密钥加密消息, 开始通信。

第六步, fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端浏览器。

第七步, 客户端向服务器发送消息, 用对称密钥加密, 被 fiddler 截获后, 解密获得明文。由于 fiddler 一直拥有通信用对称密钥, 所以在整个 https 通信过程中信息对其透明。

命令

左下角的黑窗口 官方文档

查找对应响应码的数据包或请求类型的数据包
=post 或者=200

查找服务器返回是图片类型的请求
select image

匹配指定字符的请求包
? str

对带有某个字段的请求包字体加粗
Bold xxx

常用命令如下

命令对应请求项介绍示例
All问号后边跟一个字符串,可以匹配出包含这个字符串的请求?google
>Body大于号后面跟一个数字,可以匹配出请求大小,大于这个数字请求>1000
<Body小于号跟大于号相反,匹配出请求大小,小于这个数字的请求<100
=Result等于号后面跟数字,可以匹配HTTP返回码=200
@Host@后面跟Host,可以匹配域名@www.baidu.com
selectContent-Typeselect后面跟响应类型,可以匹配到相关的类型select image
clsAll清空当前所有请求cls
dumpAll将所有请求打包成saz压缩包,保存到“我的文档\Fiddler2\Captures”目录下dump
startAll开始监听请求start
stopAll停止监听请求stop
断点命令
bpafterAllbpafter后边跟一个字符串,表示中断所有包含该字符串的请求bpafter baidu(输入bpafter解除断点)
bpuAll跟bpafter差不多,只不过这个是收到请求了,中断响应bpu baidu(输入bpu解除断点)
bpsResult后面跟状态吗,表示中断所有是这个状态码的请求bps 200(输入bps解除断点)
bpv / bpmHTTP方法只中断HTTP方法的命令,HTTP方法如POST、GETbpv get(输入bpv解除断点)
g / goAll放行所有中断下来的请求g