HTTPS真的安全吗?------ 使用 mitmproxy 中间人攻击破解 GitHub 登录会话
1. 网络拓扑
Mac主机(192.168.1.21) → Win11虚拟机(192.168.1.31)
| |
Chrome浏览器 mitmproxy监听
代理设置:192.168.1.31:9090 端口:9090(流量)/9091(web界面)
正确的配置步骤
步骤 1:在 Win11 虚拟机启动 mitmproxy
bash
# 启动 mitmweb,监听 9090 端口(与 Mac 代理设置一致)
mitmweb --listen-host 0.0.0.0 --listen-port 9090 --web-port 9091
# 或者如果您需要同时捕获 Windows 本地流量,可以添加 --allow-hosts
mitmweb --listen-host 0.0.0.0 --listen-port 9090 --web-port 9091 --allow-hosts ".*"

步骤 2:配置 Mac 主机 Chrome 代理
- 安装 SwitchyOmega 或其他代理扩展
- 新建情景模式:
- 代理协议:HTTP
- 代理服务器:
192.168.1.31(Win11虚拟机IP) - 代理端口:
9090
- 或使用系统代理设置:
bash
# 终端中设置
networksetup -setwebproxy "Wi-Fi" 192.168.1.31 9090
networksetup -setsecurewebproxy "Wi-Fi" 192.168.1.31 9090
步骤 3:安装 mitmproxy CA 证书
在 Mac 主机上:
- 访问
http://mitm.it(通过代理) - 下载 macOS 证书
- 安装到钥匙串访问:
- 双击证书安装
- 在钥匙串访问中找到该证书
- 右键 → 显示简介 → 信任 → 始终信任
步骤 4:开始捕获 GitHub 登录
- 在 Win11 打开 mitmweb 界面:
http://127.0.0.1:9091 - 在 Mac Chrome 访问:
https://github.com/login - 输入账号密码登录
- 在 mitmweb 中观察流量

如何解密密码
从 截图中可以看到:
-
找到登录请求:
- 方法:POST
- URL:
https://github.com/session - Status:302(重定向)
-
查看请求表单数据:
commit: Sign in authenticity_token: XqSNPnQ/Ht3CfaEh6m+D1tScBxxxxxxxxxxvWH03EAeaPIIBnQ== login: [我的账号] password: xxxx webauthn-support: supported
完整实验命令参考
Win11 虚拟机端:
bash
# 方法 1:使用 mitmweb(推荐)
mitmweb --listen-host 0.0.0.0 --listen-port 9090 --web-port 9091 --ssl-insecure
# 方法 2:使用 mitmdump 输出到文件
mitmdump --listen-host 0.0.0.0 --listen-port 9090 -w github_traffic.mitm
# 方法 3:使用过滤器只捕获 GitHub 流量
mitmweb --listen-host 0.0.0.0 --listen-port 9090 -f "~d github.com"
验证配置:
- 在 Win11 检查防火墙:
bash
netsh advfirewall firewall add rule name="mitmproxy" dir=in action=allow protocol=TCP localport=9090
- 在 Mac 测试连接:
bash
curl --proxy http://192.168.1.31:9090 https://github.com
故障排除
常见问题 1:连接不上
bash
# Win11 查看端口监听
netstat -an | findstr :9090
# 临时关闭防火墙测试
netsh advfirewall set allprofiles state off
常见问题 2:证书错误
- 确保在 Mac 正确安装 mitmproxy CA
- 清除 Chrome 缓存和 SSL 状态
- 重启 Chrome 或使用隐私模式
常见问题 3:看不到 HTTPS 内容
确保:
- 代理设置正确
- 证书已安装并信任
- 访问
https://mitm.it显示正常
实验结果分析
当您成功配置后,在 mitmweb 中应该能看到:
POST https://github.com/session请求- 请求体中的
password字段 - 302 重定向响应
- 后续的
Set-Cookie操作