## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HARDIKMODHA-POC-CVE-2023-32681
# CVE-2023-32681 的 PoC
这是 CVE-2023-32681 的 Python 3 实现,影响使用 requests 版本 <= 2.30.0 的客户端。
根据 https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4,每当服务器发出 3xx 重定向时,用户代理应修改请求,删除请求中的某些头部和字段。
这些字段的详细信息可参见 https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4-5。针对该 CVE,我在此高亮显示了相关部分。

requests 版本 <= 2.30.0 在处理到 "https" 的重定向时没有移除 "Proxy-Authorization" 头部,从而导致代理凭证泄露给了重定向目标服务器。
更多详细信息可参见:
* https://vulners.com/cve/CVE-2023-32681
* https://security.snyk.io/vuln/SNYK-PYTHON-REQUESTS-5595532
## 前置条件
* 用于 HTTP(S) 服务器的有效证书集。您可以使用 mkcert 在本地生成证书。
* Go v1.19
* Python 3.x
* virtualenv(可选)
## 概述
1. 用 Go 实现的代理服务器。它在端口 8080 启动一个代理服务器,并需要基本认证。为 PoC 目的,代码中硬编码了用户名和密码。
2. 用 Go 实现的 HTTP(S) 服务器。它启动了两个服务器:
* 重定向服务器监听端口 443,另一个回声服务器监听端口 4431。
* 重定向服务器定义了一个路由 `/redirect`,将流量重定向到运行在 4431 的第二个服务器。
* 回声服务器定义了一个路由 `/echoHeaders`。该路由将收到的请求头部返回给客户端。
3. PoC Python 脚本。它向运行在端口 443 的重定向服务器发出一个经过代理的请求,并打印服务器返回的响应。
4. 如果响应包含 `Proxy-Authorization` 头部,则说明 `requests` 版本存在 "CVE-2023-32681" 漏洞。
## 步骤
1. 克隆此仓库。
2. 更新 `server/main.go` 中的 `certFile` 和 `keyFile` 变量。
3. 通过运行命令 `go run server/main.go` 启动 HTTP(S) 服务器。这将启动两个服务器,分别监听端口 443 和 4431。
4. 通过运行命令 `go run proxy/main.go` 启动代理服务器。这将启动监听端口 8080 的代理服务器。
5. 安装运行 Python 脚本所需的依赖:`pip3 install -r script/requirements_request_2_30_0.txt`
6. 执行 PoC 脚本:`python3 script/poc.py`,并观察输出。您会看到服务器在响应中返回了 "Proxy-Authorization" 头部。 服务器也会在日志中打印收到的头部。
7. 现在,将 requests 版本升级到 >= 2.31.0,或者执行 `pip3 install -r script/requirements_request_2_31_0.txt`
8. 再次执行 PoC 脚本:`python3 script/poc.py`,并观察输出。您会看到 "Proxy-Authorization" 头部现已不再出现在服务器响应中。 同样可以在服务器日志中验证。
## 截图
### 代理服务器

### requests==2.30.0
 
### requests==2.31.0
 