陈大剩博客

【全球首发】Fiddler FiddlerOrchestra 抓包详解

  • 陈大剩
  • 2024-10-10 23:32:33
  • 323

本文理论上是全球首发了,因为谷歌确实没有搜索到有人对 FiddlerOrchestra Beta 一些比较详细的介绍案例,而且也没有看到有正确的使用 FiddlerOrchestra Beta

背景

最近整理 Fiddler 抓包,在状态栏发现一个很有意思 FiddlerOrchestra Beta 标签,便开始研究 FiddlerOrchestra

有意思的是网上关于这块的教程很少,且大部分是错误的教程,如:Fiddler(八) - 抓取手机APP的流量-插件Fiddler Orchestra Beta安装&配置fiddler-003-抓取app视频,抓取抖音、西瓜、快手视频,小小的七色花,想抓保存什么就保存什….

这些教程错误之处在与:

  1. 不用反向代理 HTTP\HTTPS 且错误引导开启 HTTP\HTTPS
  2. 只开启 HTTP 解析(无法解决安卓\Ios证书错误代理 HTTPS)
  3. 没有解释用 FiddlerOrchestra 的原因。

这些教程只用抓 HTTP 只用 Fiddler 就行,为什么 还要多次一举用 FiddlerOrchestra 呢?

这些教程的开发者可能没有注意 FiddlerOrchestra 官方的初衷, 从 FiddlerOrchestra 官方 FiddlerCore for .NET Standard and Fiddler Orchestra—the Future of Fiddler 这篇文章中其实说的很清楚,原因是: Fiddler 没有良好的跨平台性,跟不上时代步伐,所以提出 FiddlerOrchestra 一种 Web UI 方案的 Fiddler ,一种跨平台的方案的尝试。FiddlerOrchestra 官方的初衷是提供一种 Web 方式的 Fiddler ,但由于一些现实原因未全部开发完成(2017启动的开发),目前只提供连接 Fiddler 的控制器的版本 。

且不说为啥跳票这么久,但确实是提供了一种跨平台方案,后面也补上了 使用文档(A Brief User Guide on Fiddler Orchestra)

注意:没有其他平台需求,直接用 fiddler 就好了。

FiddlerOrchestra 原理详解

在此之前如果你想要用 MacOs、Linux、… 使用 Fiddler,那几乎是不可能的,现在我们可以通过 FiddlerOrchestra 在 MacOs、Linux、… 使用 Fiddler 功能了。

FiddlerOrchestra 代理传统的 HTTP\HTPPS 外,还可以 反向代理 HTTP\HTPPS(目前全网上还没有一篇文章介绍),稍后我会介绍如何正确反向代理 HTTP\HTPPS(算是第一篇啦)。

截止到目前 Fiddler 还未开发好 Web UI 版 FiddlerOrchestra 抓包也没, FiddlerOrchestra 只能起到转发 Windows Fiddler 客户端作用,FiddlerOrchestra 原理如下:

  • Fiddler Orchestra Controller(控制器),必须是 Windows Fiddler 用来接受 Fiddler Orchestra Client (跨平台客户端) 转发进来的流量。
  • Fiddler Orchestra Client (跨平台客户端),可以是 MacOs、Linux、… 必须安装 Fiddler Orchestra Client 程序,用来连接 Fiddler Orchestra Controller(控制器)。
  • Capture traffic devices(被抓包设备),任意需要抓包的设备,代理跨平台客户端。

FiddlerOrchestra 原理详解

众所周知 Fiddler 抓包是利用 中间人攻击(Man-in-the-middle attack,MitM) ,其中 Fiddler Orchestra Client (跨平台客户端)充当中间人代理 Capture traffic devices(被抓包设备)HTTP\HTTPS 请求,然后将顺带将 HTTP\HTTPS 复制一份流量转发 Fiddler Orchestra Controller(控制器)进行分析。

注意:就是说还是必须要有一台 Windows 设备安装 Fiddler 充当控制器,用来解析跨平台客户端转发的流量。

注意:Windows 设备安装 Fiddler 充当控制器,在控制器模式下有些 rule 过滤条件无法生效(可能是 bug)。

Fiddler Orchestra Client (跨平台客户端) 安装与连接

使用 FiddlerOrchestra 前需要安装 Fiddler Orchestra Client (跨平台客户端)客户端。

注意:官方提供了 使用文档(A Brief User Guide on Fiddler Orchestra) 详细的安装方式,本文以 Windows 为例安装 Fiddler Orchestra Client 。

安装相应 .NET 环境

Fiddler Orchestra Client (跨平台客户端)是基于.NET开发需要安装相应的环境 .NET 2.0安装地址.NET Framework 4.6.1安装地址 安装无脑下一步即可。

安装相应 .NET 环境

安装 Fiddler Orchestra Client

  1. 管理员身份启动 Fiddler,在工具栏打开 Fiddler Orchestra Beta 选项卡,根据自己的操作系统选择客户端下载。

安装 Fiddler Orchestra Client
2. 解压Fiddler Orchestra Beta客户端,并创建 Fiddler Orchestra Beta 客户端启动文件

  1. 解压后的目录创建:FiddlerOrchestra.bat 文件
  2. 文件内容:「dotnet FiddlerOrchestra.Client.NetCore.dll」
  3. 管理员身份运行:FiddlerOrchestra.bat

Fiddler Orchestra Client

连接 Fiddler

  1. 在 Fiddler Orchestra Beta 标签栏点击 start

start
2. 用浏览器打开 127.0.0.1:8800 页面 Orchestra Connection 选项卡填入 fiddler Private key 点击 Connect! 按钮

Orchestra Connection
如图则连接成功!

连接成功

FiddlerOrchestra 代理 HTTP\HTTPS

本文演示安卓抓包,因为 Fiddler 默认生成策略 中不包含 Authority KeyID 字段,安卓 和 IOS 设备证书需要通过 CertMaker for iOS and Android 插件生成 CA 证书。

CertMaker for iOS and Android 插件下载地址为:CertMaker for iOS and Android,下载后直接点击就行后,进入 tool =>option 导出 FiddlerRoot.cer 到桌面。

CA证书

注意:一定仔细看 Certificates generated by 选项是否为:BccertMaker.BccertMakerfrom certMaker.dll,不是则重新生成。

Capture traffic devices(被抓包设备)信任证书

其他设备安装 fiddler 默认的信任证书步骤即可,某些安卓无法信任证书,可参考 Fiddler 安卓模拟器 HTTPS 证书配置

生成.p12证书并上传证书【解决安卓证书错误问题】

生成 .p12 确保抓包 HTTPS 协议,如只需要抓 HTTP 跳过本小节即可。

  1. 生成 .p12 证书需要用到 openssl,安装 openssl 可参考:win10安装OpenSSL及简单的使用

  2. 安装拷贝出 CA证书私钥,具体步骤在快速执行命令行输入about:config 回车,拷贝fiddler.certmaker.bc.key的值,如图所示:

私钥
3. 在桌面上新建一个记事本文件,命名为 private_key.pem 添加指定的头尾,再将刚刚拷贝的字符粘贴到其中。

-----BEGIN PRIVATE KEY-----
私钥字符串xxx
-----END PRIVATE KEY-----
  1. 打开 cmd 到桌面目录(一定要到)下,执行如下命令:
openssl pkcs12 -export -out output.p12 -inkey private_key.pem -in FiddlerRoot.cer  -macalg sha1 -keypbe pbeWithSHA1And3-KeyTripleDES-CBC -certpbe pbeWithSHA1And3-KeyTripleDES-CBC

参数说明:

  • -export:指示 OpenSSL 导出为 P12 格式。
  • -out output.p12:指定生成的 P12 文件名。
  • -inkey private_key.pem:指定包含私钥的文件。
  • -in certificate.cer:指定包含公钥证书的文件。
  • -passout pass:your_password:设置导出密码,替换 your_password 为你希望使用的密码。
  • -macalg sha1:指定使用 SHA-1 作为 MAC 算法。
  • -keypbe 和 -certpbe:分别指定私钥和证书的加密算法,这里必须使用 pbeWithSHA1And3-KeyTripleDES-CBC。

一定要确保在生成 P12 文件时使用的文件和参数符合 Fiddler Orchestra 的要求. -macalg sha1 -keypbe pbeWithSHA1And3-KeyTripleDES-CBC -certpbe pbeWithSHA1And3-KeyTripleDES-CBC

  1. 上传.p12证书,看到提示即算成功。
    上传.p12证书

代理 HTTP/HTTPS

  1. 回到 127.0.0.1:8800 页面,选择:Allow remote clients to connectDecrypt HTTPS (不抓包 HTTPS 不需要选择此项)。

代理 HTTP/HTTPS

注意:网上很多教程代理 HTTP/HTPPS ,必须要开启 HTTP/HTTPS 反向代理选项是错误的。

  1. 设置 Capture traffic devices(被抓包设备)代理

被抓包雷电模拟器模拟安卓设备设置代理,填写好代理后,如果按照之前的操作 [Capture traffic devices(被抓包设备)信任证书](#Capture traffic devices(被抓包设备)信任证书) 信任了证书,就可以愉快的抓包了。
Capture traffic devices
3. 抓包 HTTP/HTTPS 流量。

进行流量访问就可以将包传到 Fiddler Orchestra Controller(控制器)中分析流量了。

抓包 HTTP/HTTPS 流量

反向代理 HTTP/HTPPS

FiddlerOrchestra 反向代理类似于 Nginx ,也就是说在代理过程中将流量转发至 Fiddler 。目前感觉反向代理 HTTP/HTPPS 有点鸡肋,不知后期 FiddlerOrchestra 团队是有什么特殊的奇淫技巧。

全网对 FiddlerOrchestra 反向代理 HTTP/HTPPS 教程并不多,导致很多博主写博文时都错误的以为 代理 HTTP/HTPPS 必须要开启 反向代理 HTTP/HTPPS,实际上是两种不同代理。

原理如下:

反向代理 HTTP/HTPPS
具体流程:

  1. Capture traffic devices(被抓包设备)通过 80/443 端口访问 Web 服务器(被抓包设备并不知情是否发给了某某)。
  2. 流量通过 80/443 端口访问服务器时被 Fiddler Orchestra Client (跨平台客户端)反向代理给 Web 服务器可能端口是 9000 (PHP-FPM),其中在复制一份流量给 Fiddler Orchestra Controller(控制器)。【也就类似 Nginx 功能】
  3. Fiddler Orchestra Controller(控制器)可以通过中间人攻击篡改一些数据给 Capture traffic devices(被抓包设备)。

注意:如果都有服务反向代理需求,基本上直接改 Nginx 就行,篡改请求日志打印 Nginx 都有。

反向代理 HTTP 测试

本文只演示 反向代理 HTTP 代理,反向代理 HTTPS 代理 同理,把秘钥输入好就行。

  1. 先填写 代理(Listen on port)被代理端口(Host listens on port)并勾选 Allow remote clients to connect 后点击 start。这里 Capture traffic devices(被抓包设备)先会 访问代理(Listen on port)8080 端口,然后被转发至 被代理端口(Host listens on port)80 端口,并复制一份流量给Fiddler Orchestra Controller(控制器)。

反向代理 HTTP 测试
2. 用 Go 语言 编写一个 Http 协议的 Hello, World!,访问 127.0.0.1:80 会显示 Hello, World!。

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", handler)

    fmt.Println("Listening on port 81...")
    err := http.ListenAndServe(":81", nil)
    if err != nil {
        fmt.Println("Error starting server:", err)
    }
}

代码
3. 访问 127.0.0.1:8080 端口,查看 Fiddler Orchestra Controller(控制器)是否抓包成功。

是否抓包成功
4. 抓包成功后篡改请求,测试反向代理是否成功。

已成功篡改请求

已成功篡改请求

话说我们都有服务器反向代理了,还用的着去篡改请求吗?直接用 Nginx 返回就行,所以我说是鸡肋功能,再者说 Nginx 也有请求日志分析。

分享到:
0

说点儿什么吧

头像

表情

本站由陈大剩博客程序搭建 | 湘ICP备2023000975号| Copyright © 2017 - 陈大剩博客 | 本站采用创作共用版权:CC BY-NC 4.0

站长统计| 文章总数[115]| 评论总数[9]| 登录用户[22]| 时间点[119]

logo

登入

社交账号登录