Windows 如何捕获/分析 HTTPS 数据包

2020年05月25日 124点热度 2人点赞 0条评论

对于很多开发人员或者上网络安全人员来说,捕获/分析应用程序的网络数据包是一项必备技能。而网络数据包最常见的就是 HTTP 和 HTTPS 数据包,如果是 HTTP,使用 Wireshark 就可以查看数据包的内容,但如果是 HTTPS,事情就变得复杂了起来。因为客户端接收到的证书必须是受系统信任的,就算你给系统安装了自定义的根证书,也无法像 HTTP 那样直接使用 Wireshark 观察数据包内容。我们一般都需要一些额外的工具才能捕获 HTTPS 数据包。

这篇文章就是主要教大家捕获 HTTPS 数据包的方法,不过不涉及工具的具体使用方法。

安装捕获工具

首先我们需要一个专门用于 HTTP(S) 的捕获工具,这类工具的原理就是在本地运行 HTTP 代理服务器,所有经过代理服务器的数据包都会被捕获。

这类工具的选择很多,比如 Windows 用户最常用的 Fiddler,还有比较专业的 BurpSuiteOWASP ZAP

我个人比较偏向 OWASP ZAP,多平台支持且开源,并且具有多语言的支持。

这些软件安装之后,需要把他们的 SSL 根证书导入到系统,这样在捕获 HTTPS 流量的时候系统才会信任他们。

拿 OWASP ZAP 举例:OWASP ZAP 安装完成后,打开软件的设置,切换到「Dynamic SSL Certificates」,它默认会自动生成一个根证书,右边会显示证书内容,点击 [查看] → [安装证书],证书存储位置选择 [本地计算机],下一步,选择 [将所有的证书都放入下列存储],点击下方的 [浏览],选择 [受信任的根证书颁发机构],下一步,完成,提示「导入成功」即可。


如果目标软件支持设置 HTTP 代理,只需要把目标软件的代理设置为捕获工具的 HTTP 代理服务器就可以了,比如 OWASP ZAP 的 HTTP 代理服务器默认监听本地的 8080 端口。如果不支持设置 HTTP 代理,就需要用到下面的方法。

重定向到代理

对于支持设置 HTTP 代理的软件来说,只需要把代理设置为捕获工具的代理服务器就可以了。

但是有些软件是不支持设置任何网络代理的,这时候就需要用到另外两个工具,分别是 ProxifierV2ray。这两个工具大多数人肯定都不陌生,但是它们两个组合在一起有什么妙用呢?

Proxifier 可以重定向应用程序的 TCP 流量到指定的 HTTP 和 SOCKS 代理服务器,说到这里,有些小伙伴可能会这样想,直接用 Proxifier 把软件重定向到捕获工具的代理服务器不就好了。我最开始也是这样想的,但实际上不行。

因为 HTTPS 请求并不是直接到达代理服务器的,所以捕获工具无法得知 HTTPS 请求的主机名,这样就造成了捕获工具无法生成有效的 SSL 证书。

而我目前想到的解决方法就是利用 V2ray 的流量探测功能,正确的将请求转发到捕获工具的代理服务器,如果小伙伴们有更好的方法,欢迎评论告诉我。

首先需要让 V2ray 在本地运行个 SOCKS 代理服务器,V2ray 的下载安装以及使用方法可以到官网查看,我只分享配置文件示例:

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "port": 10800,
      "listen": "0.0.0.0",
      "tag": "socks-inbound",
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "http",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 8080
          }
        ]
      },
      "tag": "http-outbound"
    },
    {
      "protocol": "freedom",
      "tag": "freedom-outbound"
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "port": "80,443",
        "network": "tcp",
        "protocol":["http", "tls"],
        "outboundTag": "http-outbound"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "freedom-outbound"
      }
    ]
  }
}

以上这个配置文件会运行 SOCKS 服务器并监听 10800 端口,然后把 80 和 443 端口的 TCP 流量转发到本地的 8080 端口 HTTP 代理服务器,其他端口以及 UDP 流量不经过任何处理。

然后开始配置 Proxifier,点击「Profile」菜单并选择 [Proxy Servers] 添加代理服务器,地址和端口分别填写 127.0.0.1 和 V2ray 监听的端口,协议选择 [SOCKS Version 5],如果询问你 Do you want Proxifier to use this proxy by default?,选择 [否]。

点击「Profile」菜单并选择 [Proxification Rules] 添加代理规则,在 [Applications] 填写需要重定向的进程名称,然后 [Action] 选择刚刚添加的代理服务器。

大功告成,现在可以打开应用程序测试重定向以及捕获是否正常了。

捕获 HTTPS 数据包


下一篇教程我会带来如何捕获 Android 系统的 HTTPS 数据包教程。如果有任何不懂的地方,欢迎加入 QQ 群与我讨论。

微信公众号二维码

微信扫描二维码关注我们

如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。

小山

一个什么都不会但要装作很厉害的人

文章评论