Fiddler是Windows上的MITM工具,基于WinINET,也可以用于WinHTTP。这篇是Fiddler Docs的阅读笔记。Fiddler还支持各种Add On
常见任务
Getting Started with Fiddler
Fiddler既可以作为客户端,在本地拦截浏览;又可以作为服务端,做一个远程拦截代理。
Install Fiddler
略
Configure Browsers
简单地说就是把浏览器代理设置为127.0.0.1:8888
Configure Fiddler to Decrypt HTTPS Traffic
需要在Tools > Fiddler Options > HTTPS里面把Decrypt HTTPS Traffic勾上。
Skip traffic decryption for an application
if (oSession.HTTPMethodIs("CONNECT") && oSession["X-PROCESSINFO"] && oSession["X-PROCESSINFO"].StartsWith("outlook"))
{
oSession["x-no-decrypt"] = "boring process";
}
Decrypt traffic from one hostname only
if (oSession.HTTPMethodIs("CONNECT") &&
!oSession.HostnameIs("SiteICareAbout.com"))
{
oSession["x-no-decrypt"] = "do not care.";
}
Configure Windows Client to trust Fiddler Root Certificate
要拦截解密HTTPS流量,必须在本地装上Fiddler的根证书。
Respond to Requests Requiring a Client Certificate
为特殊的会话指定cer:
oSession["https-Client-Certificate"] = "C:\\test\\someCert.cer";
指定默认证书:
%USERPROFILE%\My Documents\Fiddler2\ClientCertificate.cer
Importing an SPC into a Certificate Store
Configure .NET Applications
略
Configure a PHP/cURL Application to Use Fiddler
略
Configure a Java Application to Use Fiddler
略
Configure a WinHTTP Application to Use Fiddler
略
Monitor RAS, VPN or Dialup Connections
略
Capture Traffic from Another Machine (Any OS)
在Tools > Fiddler Options,允许Allow remote clients to connect 。
Chain Fiddler to an Upstream Proxy
Fiddler会直接使用IE中配置的代理作为上游代理。
Use Fiddler as a Reverse Proxy
配置反向代理。
Capture Traffic from a Different Account
需要配置那个进程来使用Fiddler
Configure Fiddler for Windows 8 Metro-style applications
UWP应用运行在AppContainer之中,默认不能执行Loopback,需要配置一个例外,Loopback Exemption。另外一个办法是赋予App的privateNetworkClientServer权限。
还有就是要把Fiddler 的根证书加到主机的Trusted Root Store。
Configure Fiddler for Mac
建议是采用虚拟机(VMWare Fusion或者Parallels Desktop)来允许Fiddler。然后通过Remote Machine的方式捕捉流量。
Capture Traffic from iOS Device
也是通过Allow remote computers to connect。在iOS的网络连接设置中配置Fiddler代理。如果要监测HTTPS的话,需要Certificate Maker plugin,来提供一个网页给iOS下载根证书。
Configure Fiddler for Android / Google Nexus 7
与iOS的操作类似。
Monitor Windows Phone
略
Monitor PocketPC
略
Configure Fiddler to Authenticate to CBT-Protected Server
略
Monitor traffic to localhost from IE or .NET
需要使用机器名,而不是localhost。例子: http://machinename:8081/mytestpage.aspx
Bypass the Upstream Proxy
在OnBeforeRequest中添加规则:
if (oSession.HostnameIs("www.example.com")){
oSession.bypassGateway = true;
}
Capture HTTPS traffic from Firefox
可能需要手动导入证书。 可能需要使用FiddlerHook扩展。
故障排除
##其他
设置WinHTTP的代理
netsh winhttp set proxy 127.0.0.1:8888
(本篇完)
2020-08-30更新
Fiddler可以通过脚本来对请求和应答做一些操控,在 Fiddler as reverse proxy with HTTPS?这个例子中,可以把HTTPS的流量转为HTTP:
if (oSession.HostnameIs("<hostname>") && oSession.oRequest.pipeClient.LocalPort == <httpsPort>)
{
oSession.oRequest.headers.UriScheme = "http";
oSession.host = "<hostname>:<httpPort>";
}
Fiddler脚本采用的是JScript.NET,这篇网志Understanding FiddlerScript有很好的介绍。
Redirection from HTTPS to HTTP里面是另一个将HTTPS转为HTTP的例子。
Fiddler目前的问题是不支持TLS1.3,参考 Decrypting TLS 1.3
其他工具
- Fiddler原本是基于.NET的,但是Telerik最近主推的是Fiddler for Everywhere,感觉是基于Electron的,有点类似Postman,使用需要登录。
- Burp Suite的Community版是免费供个人使用的,但是Burp是基于Java的,整体安装下来比较大。
- OWASP ZAP是另一个选择。
(更新完)