
DonkAI is a hands-on lab for the OWASP Top 10 for LLM Applications (2025) - no real LLM required.
针对OWASP LLM Top 10(2025版)的动手实验 - 无需真实LLM。
DonkAI 是一个有意构建为易受攻击的 Web 应用,您只需一条命令即可运行,并通过实际攻击来学习 LLM 集成系统是如何被攻破的。每个 OWASP LLM Top 10 类别至少对应一个可玩的挑战,包含书面简介、载荷编辑器、需绕过的活跃防御、逐步提示以及每次尝试的每用户历史记录。它不止是一组固定的练习,更是一个可扩展的教学实验室:模块化架构(每类别一个文件,包含后端和前端)使得添加新漏洞、强化现有防御或为工作坊、课程和 CTF 构建全新赛道变得轻而易举。
警告 本应用故意暴露了实时攻击面(提示注入、IDOR、SQL 注入、硬编码凭据等)。它必须仅在隔离的实验室环境中运行,最好在专用虚拟机内,绝不能部署在公共互联网上。
OWASP LLM 应用 Top 10 列出了风险并提供了讨论这些风险的词汇,是任何从事 LLM 安全工作者的必读材料。DonkAI 作为该工作的动手扩展而设计:一个小型、确定的游乐场,让您亲自尝试攻击,亲眼看到攻击在一个模拟但逼真的聊天机器人上得逞,并阅读复盘,了解刚刚奏效的攻击以及真实系统如何防御它。幕后没有真实 LLM,整个堆栈基于规则,因此本实验室成本低廉、离线友好且可复现。
使用两条命令克隆、构建并启动完整堆栈:
git clone https://github.com/OWASP/DonkAI.git && cd DonkAI
docker compose up --build
然后打开 http://localhost:3000,使用 alice / password123 登录,并从左侧的 OWASP 面板中选择您的第一个挑战。
| 服务 | URL / 地址 |
|---|---|
| Web UI | http://localhost:3000 |
| 后端(API + 文档) | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 — 数据库 donk_ai_lab |
| 用户名 | 密码 | 角色 |
|---|
提示 — 要清空所有状态(用户、会话、尝试历史)并从零开始:
docker compose down -v
OWASP LLM Top 10 的每个类别至少对应一个可玩的挑战。
要添加或修改类别和挑战,请参阅 扩展挑战。
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ React SPA │ ───► │ FastAPI │ ───► │ PostgreSQL │
│ :3000 │ │ :8000 │ │ :5432 │
│ webapp/ │ │ ml-service/ │ │ database/ │
└──────────────────┘ └──────────────────┘ └────────────────┘
本应用有意易受攻击。默认设置(密码、数据库凭据、系统提示中的硬编码密钥)是教育内容的一部分,而非安全疏忽。请在本地或隔离的实验室中运行,绝不能在共享主机或公共互联网上运行,也绝不能针对真实生产数据运行。
仅将您在此学到的技巧用于您拥有或获得明确书面授权测试的系统。
alice | password123 | 用户 |
bob | password123 | 用户 |
admin | admin123 | 管理员 |
| # | 类别 | 挑战数 | 后端文件 |
|---|
| LLM01 | 提示注入 | 2 | llm01_prompt_injection.py |
| LLM02 | 敏感信息泄露 | 2 | llm02_sensitive_info.py |
| LLM03 | 供应链 | 1 | llm03_supply_chain.py |
| LLM04 | 数据与模型投毒 | 1 | llm04_data_poisoning.py |
| LLM05 | 输出处理不当 | 2 | llm05_improper_output.py |
| LLM06 | 过度代理 | 2 | llm06_excessive_agency.py |
| LLM07 | 系统提示泄漏 | 2 | llm07_system_prompt_leak.py |
| LLM08 | 向量与嵌入弱点 | 1 | llm08_vector_weaknesses.py |
| LLM09 | 虚假信息 | 1 | llm09_misinformation.py |
| LLM10 | 无限制消耗 | 1 | llm10_unbounded_consumption.py |
| 层 | 技术栈 | 作用 |
|---|
| 前端 | React | 渲染挑战界面、载荷编辑器以及每次尝试的历史抽屉。 |
| 后端 | FastAPI | 每个 OWASP 类别一个基于规则的挑战引擎 —— 完全确定,无 LLM 调用。 |
| 数据库 | PostgreSQL | 存储 users、chat_sessions、chat_messages、exploit_attempts |