sabat090/LLM_H4CK_101
GitHub: sabat090/LLM_H4CK_101
一个本地运行的 CTF 风格 LLM 安全训练靶场,通过 hands-on 实验帮助安全从业者系统掌握 OWASP LLM Top 10 漏洞的攻击与防御技术。
Stars: 0 | Forks: 0
# LLM_H4CK_101 — LLM 安全训练靶场
[](https://github.com/sabat090/LLM_H4CK_101/stargazers)
[](https://github.com/sabat090/LLM_H4CK_101/blob/main/LICENSE)
[](https://www.python.org/)
[](https://owasp.org/www-project-top-10-for-large-language-model-applications/)
[](https://ollama.com/)
实战型、CTF 风格的训练靶场,用于学习如何攻击和防御基于 LLM 的应用程序。每个模块遵循基于 Kolb 经验学习周期的四阶段教学法:**探索 (EXPLORE) → 学习 (LEARN) → 实践 (PROVE) → 反思 (REFLECT)**。
专为安全专业人员、渗透测试人员、红队成员和开发人员构建,旨在通过实践而非仅仅停留在理论层面来深入理解 LLM 漏洞。使用这些提示注入靶场,在安全的离线环境中提升您的 AI 安全防护与 LLM 渗透测试技能。
## 模块
| # | 模块 | 漏洞类型 | 端口 | 加固端口 |
|---|---|---|---|---|
| 01 | [提示泄漏](module-01-prompt-leakage/) | 系统提示提取 | 8001 | 8010 |
| 02 | [直接注入](module-02-direct-injection/) | 用户覆盖机器人行为 | 8002 | 8003 |
| 03 | [间接注入](module-03-indirect-injection/) | 有毒数据劫持 LLM | 8004 | 8005 |
| 04 | [通过输出触发的 SSRF](module-04-ssrf-output/) | LLM 输出触发服务端请求 | 8006 | 8007 |
每个模块包含:
- **01-explore/** — 任务简报 + 存在漏洞的靶场环境(盲测挑战)
- **02-learn/** — 理论知识、技术手段、真实事件案例和测验
- **03-prove/** — 带提示的引导式漏洞利用 + 提交 Flag
- **04-reflect/** — 防御指南 + 加固后的靶场环境供再次挑战
- **solution/** — 完整的通关攻略 + 自动化漏洞利用脚本
- **tests/** — 自动化漏洞验证
## 快速开始
## 靶场搭建(详细说明)
### 步骤 1 — 安装 Python
您需要 **Python 3.10 或更高版本**。
```
# 检查您的版本
python --version # Should show 3.10+
# 如果未安装:
# Windows — https://www.python.org/downloads/ (勾选 "Add to PATH")
# macOS — brew install python@3.12
# Linux — sudo apt install python3 python3-pip python3-venv
```
### 步骤 2 — 克隆仓库
```
git clone https://github.com/sabat090/LLM_H4CK_101.git
cd promptlabs
```
### 步骤 3 — 创建虚拟环境(推荐)
```
# 创建
python -m venv .venv
# 激活
.venv\Scripts\activate # Windows (PowerShell)
.venv\Scripts\activate.bat # Windows (CMD)
source .venv/bin/activate # macOS / Linux
# 您应该会在终端提示符中看到 (.venv)
```
### 步骤 4 — 安装依赖
```
pip install -r requirements.txt
```
这将安装:
- **FastAPI** — 用于靶场服务器的 Web 框架
- **uvicorn** — 用于运行每个靶场的 ASGI 服务器
- **httpx** — HTTP 客户端(由 SSRF 靶场和 LLM 适配器使用)
### 步骤 5 — 设置 LLM 提供商
从以下三个选项中**任选其一**:
#### 选项 A — Ollama(推荐、免费、本地运行)
最适合注重隐私和离线使用的场景。完全在您的本地机器上运行。
```
# 1. 安装 Ollama
# 从 https://ollama.ai 下载 (Windows/macOS/Linux)
# 2. 拉取模型(选择一个)
ollama pull qwen2.5:7b # 4.7 GB — best results, needs 8GB+ RAM
ollama pull llama3.2:3b # 2.0 GB — lighter, works on 8GB RAM
ollama pull phi3:mini # 2.3 GB — good alternative
# 3. 验证其正在运行
ollama list # Should show your pulled model
curl http://localhost:11434/api/tags # Should return JSON (or open in browser)
```
#### 选项 B — OpenAI API
```
# 需要从 https://platform.openai.com/api-keys 获取 API key
# 您将按 token 计费 — 实验消耗的 token 极少(每次会话约 $0.01-0.05)
```
#### 选项 C — Google Gemini API
```
# 需要从 https://aistudio.google.com/app/apikey 获取 API key
# 提供带有速率限制的免费套餐
```
### 步骤 6 — 配置环境
```
# 复制示例 config
cp .env.example .env # macOS / Linux
copy .env.example .env # Windows
```
使用您的设置编辑 `.env` 文件:
```
# === 对于 Ollama(默认) ===
LLM_PROVIDER=ollama
LLM_MODEL=qwen2.5:7b
LLM_BASE_URL=http://localhost:11434
# === 对于 OpenAI(取消注释并填写) ===
# LLM_PROVIDER=openai
# LLM_MODEL=gpt-4o-mini
# OPENAI_API_KEY=sk-your-key-here
# === 对于 Gemini(取消注释并填写) ===
# LLM_PROVIDER=gemini
# LLM_MODEL=gemini-2.0-flash
# GEMINI_API_KEY=your-key-here
```
### 步骤 7 — 启动您的第一个靶场
```
# 交互式菜单(最简单)
python launch.py
# 或者直接启动特定模块
python launch.py --module 01
# 或者启动 hardened 变体
python launch.py --module 01 --hard
# 或者指定自定义端口
python launch.py --module 01 --port 9001
```
在浏览器中打开 **http://localhost:8001**(终端输出中会显示相应端口)。
### 步骤 8 — 提交 Flag
当您找到 flag(格式:`FLAG{...}`)时,提交它:
```
python scripts/submit_flag.py --lab 01 --flag "FLAG{your_flag_here}"
```
### 手动启动(高级)
如果您不想使用启动器:
```
# 设置您的 model(如果不使用 .env)
$env:LLM_MODEL="qwen2.5:7b" # PowerShell
export LLM_MODEL=qwen2.5:7b # bash
# 使用 uvicorn 直接运行任何实验
uvicorn main:app --app-dir module-01-prompt-leakage/01-explore/lab/app --host 127.0.0.1 --port 8001
# 打开 http://localhost:8001
```
### 故障排除
| 问题 | 解决方案 |
|---------|-----|
| `ModuleNotFoundError: fastapi` | 激活您的虚拟环境:`.venv\Scripts\activate`,然后运行 `pip install -r requirements.txt` |
| 在端口 11434 上出现 `Connection refused` | Ollama 未运行 — 从系统托盘启动它,或运行 `ollama serve` |
| `Model not found` 错误 | 请先拉取模型:`ollama pull qwen2.5:7b` |
| 靶场启动但聊天返回错误 | 检查 `.env` 文件 — 确保 `LLM_PROVIDER` 和 `LLM_MODEL` 与您的设置匹配 |
| 端口已被占用 | 使用 `--port XXXX` 标志或终止占用该端口的进程 |
| 响应缓慢 | 使用较小的模型(如 `llama3.2:3b`)或确保没有运行其他繁重的进程 |
## 每个模块是如何运作的
### 阶段 1:探索(先尝试)
阅读任务简报,启动存在漏洞的聊天机器人,并在没有任何指导的情况下尝试找到 flag。这是真正发生学习的环节。
### 阶段 2:学习(理解原因)
学习漏洞类别——概念、攻击技术、真实世界事件以及知识测验。
### 阶段 3:实践(引导式攻击)
按照带有渐进式提示的靶场指南进行操作。提取 flag 并提交以进行验证。
### 阶段 4:反思(防御与再次突破)
学习防御技术,然后面对应用了保护措施的加固版靶场。您还能突破它吗?
## 配置
将 `.env.example` 复制到 `.env` 以进行自定义:
```
LLM_PROVIDER=ollama # ollama | openai | gemini
LLM_MODEL=qwen2.5:7b # any model your provider supports
LLM_BASE_URL=http://localhost:11434
# OPENAI_API_KEY=sk-... # 仅在使用 openai 时
# GEMINI_API_KEY=... # 仅在使用 gemini 时
```
## 项目结构
```
promptlabs/
├── shared/ # Common code
│ ├── llm_backend.py # Unified LLM adapter (Ollama/OpenAI/Gemini)
│ ├── flag_checker.py # Flag validation (SHA-256 hashed)
│ └── chat_ui/ # Shared chat frontend
├── module-01-prompt-leakage/
├── module-02-direct-injection/
├── module-03-indirect-injection/
├── module-04-ssrf-output/
├── scripts/ # CLI tools
├── launch.py # Interactive launcher
├── requirements.txt
└── .env.example
```
## 安全提示
这些靶场是**故意设计为存在漏洞的**。它们仅限本地教育使用。
- **切勿**部署在公共网络上或将其暴露在互联网上
- 所有服务器均绑定到 `127.0.0.1`(仅限本地主机)
- Flag 均为合成的 CTF 值——未使用任何真实凭据
- Flag 答案在源代码中经过 SHA-256 散列处理,以防剧透
## 路线图 — LLM 渗透测试者的进阶之路
PromptLabs 被设计为一个循序渐进的进阶课程。完成所有层级,从新手蜕变为精英。
### 层级 1 — 基础 *(现已提供)*
| # | 模块 | 您将学到什么 |
|---|--------|----------------|
| 01 | **提示泄漏** | 提取隐藏的系统提示,理解信息披露 |
| 02 | **直接注入** | 覆盖模型指令,绕过角色约束 |
| 03 | **间接注入** | 投毒检索数据,通过 RAG/上下文劫持 LLM 行为 |
| 04 | **通过 LLM 输出的 SSRF** | 武器化模型输出,触发对内部服务的服务端请求 |
### 层级 2 — 漏洞利用 *(即将推出)*
| # | 模块 | 您将学到什么 |
|---|--------|----------------|
| 05 | **工具与函数滥用** | 操纵 function-calling / tool-use 以调用非预期的操作(数据库查询、文件操作、API 调用) |
| 06 | **多轮越狱** | 串联对话轮次以逐步削弱安全护栏——DAN、人格注入、渐增式攻击 |
| 07 | **RAG 投毒** | 破坏向量存储的 embedding,在检索增强应用中植入持久性后门 |
| 08 | **Agent 劫持** | 接管自主的 LLM Agent(ReAct、AutoGPT 模式),以重定向目标并窃取数据 |
### 层级 3 — 规避与隐蔽 *(计划中)*
| # | 模块 | 您将学到什么 |
|---|--------|----------------|
| 09 | **输出过滤器绕过** | 利用编码、混淆和 token 操作技术绕过内容过滤器、输出验证器和安全分类器 |
| 10 | **提示混淆** | 构造能够绕过输入过滤的有效载荷——Base64 注入、Unicode 技巧、多语言攻击 |
| 11 | **Embedding 与相似度攻击** | 利用余弦相似度搜索,通过对抗性 embedding 展示攻击者控制的内容 |
| 12 | **多模态注入** | 在由视觉/多模态模型处理的图像、音频和文档中隐藏提示 |
### 层级 4 — 高级操作 *(计划中)*
| # | 模块 | 您将学到什么 |
|---|--------|----------------|
| 13 | **模型拒绝服务** | 触发资源耗尽——递归生成、上下文窗口滥用、计算密集型提示 |
| 14 | **训练数据提取** | 使用成员推理和提取提示恢复模型记忆的 PII、机密和代码 |
| 15 | **供应链 — 插件攻击** | 利用 LLM 生态中脆弱的第三方插件、MCP 服务器和工具集成 |
| 16 | **跨会话数据泄漏** | 从共享模型上下文、对话记忆和持久化 Agent 状态中提取信息 |
### 层级 5 — 红队终极挑战 *(计划中)*
| # | 模块 | 您将学到什么 |
|---|--------|----------------|
| 17 | **链式漏洞利用靶场** | 在逼真的多服务环境中结合 3 种以上技术——侦察 → 注入 → 数据窃取 |
| 18 | **AI SOC 规避** | 攻击由 LLM 驱动的安全运营中心——绕过 AI 驱动的警报分类和响应 |
| 19 | **Agentic 工作流接管** | 攻陷完整的 n8n/LangChain pipeline——在工具链中进行拦截、重定向和数据窃取 |
| 20 | **全面企业模拟** | 针对具有多个 LLM 服务、WAF 和监控的模拟企业进行黑盒交战 |
### 层级 6 — 精英实验室 *(机密)*
| # | 模块 | 您将学到什么 |
|---|--------|----------------|
| 21 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 22 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 23 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 24 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 25 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 26 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 27 | **`[REDACTED]`** | ██████████████████████████████████████ |
| 28 | **`[REDACTED]`** | ██████████████████████████████████████ |
想得美。这些内容涵盖了大多数安全团队甚至还未意识到其存在的攻击技术—— LLM 基础设施中的零日级别漏洞、新颖的数据窃取通道,以及转化为实用漏洞利用的对抗性 ML 研究。只有当您达到相应层级时,才会揭示相关主题。
前置条件:获得层级 1–5 中的全部 20 个 Flag。
“如果你还得问它们是什么,那说明你还没准备好。”
### 技能进阶路线
```
┌─────────────────────────────────────────────────────────────────┐
│ TIER 1: Foundations → Understand core LLM vulns │
│ TIER 2: Exploitation → Weaponize against real patterns │
│ TIER 3: Evasion & Stealth → Bypass defenses like a pro │
│ TIER 4: Advanced Operations → Target the ML pipeline itself │
│ TIER 5: Red Team Capstones → Full engagement simulations │
│ TIER 6: Elite Labs → ██████████████████████████████ │
└─────────────────────────────────────────────────────────────────┘
Beginner ───► Intermediate ───► Advanced ───► Elite ───► ?????
(Tier 1) (Tier 2-3) (Tier 4-5) (Tier 6)
```
### OWASP LLM Top 10 覆盖范围
| OWASP ID | 风险 | PromptLabs 模块 |
|----------|------|---------------------|
| LLM01 | 提示注入 | 02, 03, 06, 10 |
| LLM02 | 不安全的输出处理 | 04, 09, 12 |
| LLM03 | 训练数据投毒 | 07, 14 |
| LLM04 | 模型拒绝服务 | 13 |
| LLM05 | 供应链漏洞 | 15 |
| LLM06 | 敏感信息披露 | 01, 14, 16 |
| LLM07 | 不安全的插件设计 | 05, 15 |
| LLM08 | 过度授权 | 05, 08, 19 |
| LLM09 | 过度依赖 | 17, 18 |
| LLM10 | 模型窃取 | 11, 14 |
## 贡献
欢迎提交 PR。添加新模块的步骤如下:
1. 按照四阶段结构 `module-XX-topic/` 目录
2. 在 `shared/flag_checker.py` 中添加 flag 的散列值
3. 包含 system_prompt.txt、main.py、BRIEFING.md、学习内容、解题方案和测试
4. 确保该靶场可以通过 `uvicorn` 独立运行
## 许可证
MIT
🔒 什么是精英实验室?
想得美。这些内容涵盖了大多数安全团队甚至还未意识到其存在的攻击技术—— LLM 基础设施中的零日级别漏洞、新颖的数据窃取通道,以及转化为实用漏洞利用的对抗性 ML 研究。只有当您达到相应层级时,才会揭示相关主题。
前置条件:获得层级 1–5 中的全部 20 个 Flag。
“如果你还得问它们是什么,那说明你还没准备好。”
标签:AI安全, AI漏洞挖掘, AI风险缓解, Chat Copilot, CISA项目, IP 地址批量处理, LLM评估, Ollama, OPA, OWASP LLM, OWASP Top 10, Petitpotam, Python, SSRF, TGT, 人工智能安全, 合规性, 大模型安全, 安全培训, 安全实验, 攻防演练, 无后门, 本地部署, 系统提示提取, 网络安全, 网络靶场, 越狱, 运行时操纵, 逆向工具, 隐私保护, 靶场