一个小型自包含的 FastAPI 实验环境,演示了在验证文件系统边界之前解码用户输入如何导致目录遍历和本地文件包含(LFI),该环境模拟了 Apache HTTP Server 的 CVE-2021-41773 问题。
%2e)和双重编码(%252e)绕过curl 测试的快速有效载荷uvicorn 在本地运行安装运行时依赖:
pip install fastapi uvicorn
python -m venv venv
.\venv\Scripts\activate
pip install fastapi uvicorn
uvicorn vulnerable_app:app --port 8011
在浏览器中打开 http://127.0.0.1:8011/ — 根端点显示常见有效载荷和注意事项。
要观察修复效果,请停止存在漏洞的服务器并运行已修补的服务器:
uvicorn patched_app:app --port 8011
curl --path-as-is http://localhost:8011/icons/test.txt
curl --path-as-is "http://localhost:8011/icons/.%2e/secret.txt"
curl --path-as-is "http://localhost:8011/icons/.%252e/secret.txt"
针对存在漏洞的服务器,这些有效载荷可能返回 secret.txt。针对已修补的服务器,它们应被拒绝(HTTP 403)。
os.path.realpath() 解析规范的文件系统路径。webroot 目录之内 — 否则拒绝。这强制了正确的顺序:解码 → 规范化 → 授权。
本仓库仅供本地与教学使用。请勿将存在漏洞的服务器暴露到公共网络中。
MIT 许可证
Kunal Khandelwal — 安全研究员(应用安全方向)