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是另一个选择。

(更新完)