昨天为了验证安全工程师大神的一个Bug,接触到了Fiddler。
Fiddler的官方网站: www.fiddler2.com
OK,下载安装不用说了。
网上介绍:Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据。
的确是这样的,不过我也就用到了最基本的两个功能,设置断点和修改数据。
由于测试的不是web端,使用fiddler抓取了url。然后开始了复查Bug的操作。
1.在Fiddler的命令行中输入bpu url(如果不输入bpu url,Fiddler就不会拦截中断这个请求,这样会无法修改字段的Value值)。
2.再访问改url(实际是一个修改文件名的功能)
3.此时Fiddler 拦截并中断了这个请求,在列表中可以看到红色的标识。
4.选择这个请求,在右侧的Inspectors tab下选择WebForms tab,在这个界面,可以看到Name和Value两个字段的列表信息,其中就有修改的文件名字段。
5.果断的将文件名修改为脚本<script>alert('Hello,welcome to soft ')</script>
6.修改完成后,点击绿色背景的Run to Completion按钮。
7.查看这句脚本是否传到了软件中,文件夹的名字是否被修改了。
其实就是简单地两个步骤,但是这个软件既然被用上了,就还应该了解下它其他的功能吧。
以下摘抄网上资料:
Fiddler的工作原理
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。
Fiddler会自动设置代理, 退出的时候会自动注销,这样就不会影响别的程序。
但如果Fiddler非正常退出,会因为Fiddler没有自动注销,会造成网页无法访问。
解决的办法是重新启动Fiddler。
同类的其它工具
httpwatch(这个在web测试的时候经常会用到)
firebug(目前用的真的真的不多,貌似开发经常用到)
wireshark(这个抓包工具是很有名的)
Fiddler 如何捕获Firefox的会话
能支持HTTP代理的任意程序的数据包都能被Fiddler嗅探到,Fiddler的运行机制其实就是本机上监听8888端口的HTTP代理。
Fiddler启动时就将IE的代理设为了127.0.0.1:8888,而其他浏览器是需要手动设置的,所以将Firefox的代理改为127.0.0.1:8888就可以监听数据了。
(这里的意思是:除了IE浏览器,其他的都需要将代理手动改为127.0.0.1:8888,不知道理解的对不对哦~)
Firefox 上通设置代理步骤:
Tools -> Options,在Options 对话框上点击Advanced tab - > network tab -> setting。
Firefox 中安装Fiddler插件
修改Firefox 中的代理比较麻烦, 不用fiddler的时候还要去掉代理。
推荐在firefox中使用fiddler hook 插件,这样可以非常方便的使用Fiddler获取firefox中的request 和response。
(原来还有插件哦~下面看下怎么安装的)
安装fiddler后, 就已经装好了Fiddler hook插件, 需要到firefox中去启用这个插件
(原来是这样啊~)
打开firefox tools->Add ons -> Extensions 启动 FiddlerHook
(新版的Firefox,在附加组件 -> 扩展里面)
Fiddler如何捕获HTTPS会话
默认下,Fiddler不会捕获HTTPS会话,设置下,打开Fiddler Tool->Fiddler Options->HTTPS tab
选中checkbox,弹出如下的对话框,点击"YES"
点击"Yes" 后,就设置好了。
Fiddler的基本界面
Inspectors tab下有很多查看Request或者Response的消息。
其中Raw Tab可以查看完整的消息,Headers tab 只查看消息中的header。
Fiddler的HTTP统计视图
通过陈列出所有的HTTP通信量,Fiddler可以很容易的展示哪些文件生成了当前请求的页面。
使用Statistics页签,可以通过选择多个会话来得到这几个会话的总信息统计,比如多个请求和传输的字节数。
选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。
从条形图表中可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度优化。
QuickExec命令行的使用
Fiddler的左下角有一个命令行工具叫做QuickExec,允许直接输入命令。
常见得命令有
help 打开官方的使用页面介绍,所有的命令都会列出来
cls 清屏 (Ctrl+x 也可以清屏)
select 选择会话的命令
?.png 用来选择png后缀的图片
bpu 截获request
Fiddler中设置断点修改Request
Fiddler最强大的功能莫过于设置断点了,设置好断点后,可以修改httpRequest 的任何信息包括host,cookie或者表单中的数据。
设置断点有两种方法
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->Before Requests(这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种:在命令行中输入命令: bpu url (这种方法只会中断url)
如何消除命令呢? 在命令行中输入命令 bpu。
(复查Bug的时候就用到了这个功能!)
Fiddler中设置断点修改Response
当然Fiddler中也能修改Response
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->After Response (这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种:在命令行中输入命令:: bpafter url (这种方法只会中断 url)
如何消除命令呢? 在命令行中输入命令 bpafter。
Fiddler中创建AutoResponder规则
Fiddler 的AutoResponder tab允许你从本地返回文件,而不用将http request 发送到服务器上。
看个实例:
1. 打开博客园首页,把博客园的logo图片保存到本地,并且对图片做些修改。
2. 打开Fiddler 找到logo图片的会话, http://static.cnblogs.com/images/logo_2012_lantern_festival.gif, 把这个会话拖到AutoResponer下
3. 选择Enable automatic reaponses 和Unmatched requests passthrough
4. 在下面的Rule Editor 下面选择 Find a file... 选择本地保存的图片. 最后点击Save 保存下。(最后一个下拉框)
5. 再用IE博客园首页, 你会看到首页的图片用的是本地的。
Fiddler中如何过滤会话
每次使用Fiddler,打开一个网站,都能在Fiddler中看到几十个会话,看得眼花缭乱。最好的办法是过滤掉一些会话,比如过滤掉图片的会话。Fiddler中有过滤的功能, 在右边的Filters 中,里面有很多选项,稍微研究下,就知道怎么用。
Fiddler中会话比较功能
选中2个会话,右键然后点击Compare,就可以用WinDiff来比较两个会话的不同了 (当然需要你安装WinDiff)
Fiddler中提供的编码小工具
点击Fiddler 工具栏上的TextWizard,这个工具可以Encode和Decode string。
Fiddler中查询会话
用快捷键Ctrl+F 打开 Find Sessions的对话框,输入关键字查询你要的会话。 查询到的会话会用黄色显示
Fiddler中保存会话
有些时候我们需要把会话保存下来,以便发给别人或者以后去分析。 保存会话的步骤如下:
选择你想保存的会话,然后点击File->Save->Selected Sessions
Fiddler的script系统
Fiddler最复杂的莫过于script系统了 官方的帮助文档: http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp
首先先安装SyntaxView插件,Inspectors tab->Get SyntaxView tab->Download and Install SyntaxView Now... 如下图
安装成功后Fiddler 就会多了一个Fiddler Script ,如下图
在里面就可以编写脚本了, 看个实例:
让所有cnblogs的会话都显示红色。
把这段脚本放在OnBeforeRequest(oSession: Session) 方法下,并且点击"Save script"
if (oSession.HostnameIs("www.cnblogs.com")) {
oSession["ui-color"] = "red";
}
这样所有的cnblogs的会话都会显示红色
如何在VS调试网站的时候使用Fiddler
在用visual stuido 开发ASP.NET网站的时候也需要用Fiddler来分析HTTP, 默认的时候Fiddler是不能嗅探到localhost的网站。不过只要在localhost后面加个点号,Fiddler就能嗅探到。
例如:原本ASP.NET的地址是 http://localhost:2391/Default.aspx,加个点号后,变成 http://localhost.:2391/Default.aspx 就可以了
第二个办法就是在hosts文件中加入 127.0.0.1 localsite
访问http://localsite:端口号。这样Fiddler也能截取到了。
Response 是乱码的
Response中的HTML是乱码的, 这是因为HTML被压缩了, 可以通过两种方法去解压缩。
1. 点击Response Raw上方的"Response is encoded any may need to be decoded before inspection. click here to transform"
2. 选中工具栏中的"Decode"。 这样会自动解压缩。