Go Catch Mitm
一个 开箱即用 的 HTTP(S) 流量截取工具,跨平台,上手简单,支持远程部署。
Github Release 前往 Github Release 界面
下载后的可执行文件 最好 放在一个 空白的文件夹 内再开始运行。运行后会自动生成配置文件,证书,数据库和响应体存储目录。
DirectoryNew Folder
- go-catch-mitm.exe
Directoryresponsebody/
- …
- config.yaml
- go-catch-ca.crt
- go-catch-ca.key
- traffic.db
config.yaml
Section titled “config.yaml”Proxy: HttpPort: 8080 PrivateIP: true PublicIP: falseWebPanel: Port: 61233 PrivateIP: true PublicIP: falseSSL: Path: 0eec2509418560869f50079092f4d233 Cert: go-catch-ca.crt Key: go-catch-ca.keyProxy & WebPanel
Section titled “Proxy & WebPanel”Port: 代理服务器监听的端口,默认为 8080PrivateIP: 是否允许局域网访问,默认为 truePublicIP: 是否允许公网访问,默认为 false
该程序使用 Golang 的 net.IP 自带的方法来判断是否为 LoopbackIP, PrivateIP 和 PublicIP,无论如何,程序将始终监听 LoopbackIP,可以根据实际需要来决定是否要监听 PublicIP 和 PrivateIP
- 本软件和被监听的软件运行在同一台电脑上,则只需要监听
LoopbackIP,可以将PrivateIP和PublicIP设置为false - 本软件无法与被监听的软件运行在同一台设备上,这是最常见的情况。启用
PrivateIP。 - 你准备把本软件运行在一台拥有公网 IP 的设备上。在大多数情况下不建议这么做。特别是当你的客户端和监听端可能位于不同的国家时,这有极大的风险导致公网 IP 被封禁。
Path: 这个Path决定了WebPanel启动时用来组合成证书的下载链接。比如:
http://127.0.0.1:61233/therewillbe32ramdomchars00000000/go-catch-ca.crt为了方便,这个实际上也可以用来下载密钥,仅需修改后缀为.key
http://127.0.0.1:61233/therewillbe32ramdomchars00000000/go-catch-ca.key使用这个主要是为了防止证书和密钥被窃取,实际上你可以把这个 Path 改成任意字符串。
- 随机字符串代码:
为了安全起见,这里将展示生成随机字符串代码,此外,保存
responsebody的路径字符串也是用这个方法生成
randomBytes := make([]byte, 16)if _, err := rand.Read(randomBytes); err != nil { return fmt.Errorf("生成随机串失败: %v", err) }randomStr := hex.EncodeToString(randomBytes)Windows 端启动方法
Section titled “Windows 端启动方法”- 获取到前文中提到的
.crt文件后双击开始安装 - 第一个页面选择
install certificate/安装证书 - 第二页里的
storelocation/存储位置选择current user/当前用户 - 第三页选择第二个
place all certificates in the following store,然后点browse/浏览,选择Trusted root certification authorities,如下图
- 然后一路
next/下一步直到弹出安装成功的提示 - 为了保证软件结束时终端不会立刻消失,需要在软件所在目录右键,然后点击
open in terminal/在终端打开然后输入Terminal window .\gocatch-windows-amd64.exe - 观察输出
其中有两条监听失败
Terminal window SQLite 数据库加载成功配置加载成功详细信息请查看 go-catch 官方文档:https://docs.wepayto.win/application/gocatch证书状态检查通过WebPanel 初始化成功HTTP(S) Proxy 监听在回环 IP: http://127.0.0.1:8080HTTP(S) Proxy 监听在私有 IP: http://10.37.26.126:8080HTTP(S) Proxy 监听在私有 IP: http://192.168.137.1:8080HTTP(S) Proxy 监听在私有 IP: http://[fdfe:dcba:9876::1]:8080WebPanel 监听在回环 IP: http://[::1]:61233WebPanel 监听在私有 IP: http://[fdfe:dcba:9876::1]:61233WebPanel 证书下载地址: http://[fdfe:dcba:9876::1]:61233/0a31b4d11055e53332ea062759363cff/go-catch-ca.crtHTTP(S) Proxy 监听在回环 IP: http://[::1]:8080WebPanel 监听在私有 IP: http://192.168.137.1:61233WebPanel 证书下载地址: http://192.168.137.1:61233/0a31b4d11055e53332ea062759363cff/go-catch-ca.crtWebPanel 监听在私有 IP: http://10.37.26.126:61233WebPanel 监听失败: listen tcp 192.168.137.1:61233: bind: The requested address is not valid in its context.WebPanel 监听在回环 IP: http://127.0.0.1:61233HTTP(S) Proxy 监听失败: listen tcp 192.168.137.1:8080: bind: The requested address is not valid in its context.WebPanel 证书下载地址: http://10.37.26.126:61233/0a31b4d11055e53332ea062759363cff/go-catch-ca.crt证书下载依赖于 WebPanel,所以这个没有提示失败,但实际上也是无效的链接Terminal window WebPanel 监听失败: listen tcp 192.168.137.1:61233: bind: The requested address is not valid in its context.HTTP(S) Proxy 监听失败: listen tcp 192.168.137.1:8080: bind: The requested address is not valid in its context.不要担心,这是正常的,因为Terminal window WebPanel 证书下载地址: http://192.168.137.1:61233/0a31b4d11055e53332ea062759363cff/go-catch-ca.crt192.168.137.1是开启 Windows 热点时自动创建的一张虚拟网卡所自动配置的 IP 地址,这种情况是由于这台电脑曾经开启过热点但是现在没有开启热点,Windows 不允许其他程序绑定到这个地址上 - 现在打开浏览器输入 WebPanel 监听的私有地址
现在这个页面是空的,因为
Terminal window http://10.37.26.126:61233traffic.db是空的,尝试为一些软件配置代理,比如微信
点击save/保存后就能看到终端里不断有请求记录刷出,回到前端页面点刷新就可以看到抓取到了好多微信的网络请求。但不要高兴的太早,仅靠这些想逆向微信是远远不够的。点击单个条目以展开,可以看到Request和Response的详细内容,以微信为例,Request和Response的content-Type大多数时候为octet-stream,是一种二进制的数据流。在网页中的预览如下也有这种的00000000: 19 f1 04 00 a2 00 00 00 9e 01 04 f1 01 00 a8 4c ...............L00000010: 51 50 b3 44 2f 3d ba 79 88 cf ce 82 c4 b6 63 86 QP.D/=.y......c.00000020: 4e 50 9f fe 63 5f 64 bc fb 58 10 52 d6 f8 da 69 NP..c_d..X.R...i00000030: c9 1a 9a 00 00 00 70 01 00 00 00 6b 00 0f 01 00 ......p....k....00000040: 00 00 64 01 00 09 3a 80 00 00 00 00 00 3d 00 0c ..d...:......=..00000050: aa 7c 1a ce a0 0e 41 76 9d 1f 16 64 00 49 20 d2 .|....Av...d.I .00000060: 22 91 7a ab 4d 86 2d 3f 10 9d e4 46 97 39 c9 ec ".z.M.-?...F.9..00000070: 66 8f aa 69 ab f7 ba 96 04 e0 fa 01 e5 47 05 f5 f..i.........G..00000080: cf a5 f0 60 72 05 1b 65 99 86 2e 66 8d b4 6a db ...`r..e...f..j.00000090: 45 8b 39 12 02 91 ea 4c f7 48 ec 1b 7d e9 ab db E.9....L.H..}...000000a0: 2f 0c a7 1c 4a 71 3b 19 f1 04 00 24 5c 81 7f 04 /...Jq;....$\..000000b0: d0 ac 35 f3 a1 fc 26 57 02 61 56 9d 30 04 76 9c ..5...&W.aV.0.v.000000c0: 81 58 71 68 b2 3d d4 d6 42 c7 e3 24 1b 92 ee 1d .Xqh.=..B..$....000000d0: 17 f1 04 01 2b 49 eb c6 97 09 5e 73 69 aa 3f e5 ....+I....^si.?.000000e0: ee b7 43 78 69 f4 ce b6 cb 3c ff fc 85 25 3f 85 ..Cxi....<...%?.想要解密这样的加密数据需要更加深入的研究,本文档不再讨论。{"data": [{"data": "a very large encrypted string"},{"data": "also a very large encrpyted string"}]}
Windows 端证书卸载方法
Section titled “Windows 端证书卸载方法”- 使用经典的
Win + r快捷键打开一个窗口并输入certmgr.msc - 打开
Root Trusted Certification authorities/Certificates并在右侧找到Golang Cache Trusted CA,如下图
- 右键,删除,确认,一气呵成。
- 删除整个路径即可清空软件所有数据和痕迹
traffic.db
Section titled “traffic.db”traffic.db 是标准的 sqlite 数据库,在代码 sqlmanage.go 中创建,其中有一个 traffic 表,等价于
CREATE TABLE IF NOT EXISTS traffic ( created_at TEXT NOT NULL, method TEXT, src_ip TEXT, dst_host TEXT, dst_ip TEXT, url TEXT, status INTEGER, req_headers TEXT, req_body BLOB, resp_headers TEXT, resp_body_path TEXT PRIMARY KEY, user_agent TEXT )- 许多软件在
https之下有额外的加密,需要额外的手段以破解。 - 如微信这样的软件使用了自制的传输协议和加密协议,数据里看到关于微信的大多数
http请求都是明文的二进制数据流,尽管我们可以看见完整的headers,但仍需大量工作来破解真正的内容。 - 软件自己把证书编译进了可执行文件里,而不是使用系统的证书,导致无法建立
https链接,不过主流证书颁发机构都在缩短证书有效期,这种情况较为少见