nithiya-rajesh/owasp-web-top10-playground

GitHub: nithiya-rajesh/owasp-web-top10-playground

一个基于 OWASP Top 10:2025 的开源 Web 应用安全实战靶场,提供十个可真实利用的漏洞场景供学习和练习。

Stars: 0 | Forks: 0

# OWASP Web Top 10 实战演练场 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/nithiya-rajesh/owasp-web-top10-playground/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) **免费、开源的经典 Web 应用安全实战练习——无需付费订阅、无需 API key,也** **无需任何形式的外部服务。** 这里的一切完全运行在你自己的机器上。 一个包含刻意设计漏洞的 Web 应用,专门用于实战演练 **[OWASP Top 10:2025](https://owasp.org/Top10/)** —— 经典的 Web 应用安全 风险(SQL injection、访问控制失效、XSS 等), 这与独立的 **OWASP LLM Top 10 Playground**(一个涵盖 AI/LLM 特定 风险的姊妹项目——等两个仓库都发布后再在此处添加链接, 例如 `https://github.com/nithiya-rajesh/owasp-llm-playground`)有所不同。 十个真实的、可实际利用的 endpoint —— 每个 OWASP 类别一个 —— 具有 应用内的目标/提示/修复指南,并在成功利用时自动捕获 flag。 可以将其想象为 Juice Shop / WebGoat / DVWA,但专门针对 当前的(2025 年)OWASP 清单。 **只能在本地、针对你自己的机器运行此应用。切勿将其公开部署** —— 这里的每一个 endpoint 都是故意留下漏洞的。** ## 场景 | # | OWASP ID | 类别 | 你将要利用的真实漏洞 | |---|---|---|---| | 1 | A01:2025 | 访问控制失效 | 订单详情中的 IDOR;通过头像导入 URL 获取器引发的 SSRF | | 2 | A02:2025 | 安全配置错误 | 遗留的已启用的 debug endpoint,泄露了配置/密钥/堆栈跟踪 | | 3 | A03:2025 | 供应链失效 | 模拟市场中的拼写错误且未经验证的“扩展” | | 4 | A04:2025 | 加密机制失效 | 可破解的无盐 MD5 密码导出;使用可猜测 secret 签名的 JWT | | 5 | A05:2025 | 注入 | 真正的 SQL injection 登录绕过(真实的 sqlite3 数据库);评论中的存储型 XSS | | 6 | A05:2025 | 不安全设计 | 结账时信任客户端提交的价格/数量,且服务端无二次校验 | | 7 | A07:2025 | 身份验证失效 | 无暴力破解锁定机制;通过忘记密码功能进行用户名枚举 | | 8 | A08:2025 | 软件或数据完整性失效 | 没有签名/完整性校验的设置恢复功能 | | 9 | A09:2025 | 安全日志与告警失效 | CRLF 日志注入 —— 伪造虚假的审计日志条目 | | 10 | A10:2025 | 异常条件处理不当 | 授权检查在遇到畸形输入时会直接放行(fails OPEN) | 有关完整的分类说明和修复方案,请参阅 `docs/OWASP_MAPPING.md`。 ## 快速开始(Docker —— 推荐) ``` git clone cd owasp-web-top10-playground docker compose up --build ``` 打开 **http://localhost:8000**。 ## 快速开始(不使用 Docker) ``` git clone cd owasp-web-top10-playground python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --reload ``` 打开 **http://localhost:8000**。 ## 工作原理 - 控制面板列出了所有 10 个场景。点击其中一个即可直接进入其 真实的、包含漏洞的页面 —— 登录表单、搜索框、结账流程, 或是适合该类别的任何页面。 - 每个场景都有 **Play(实战) / Objective(目标) / Hints(提示) / Fix(修复)** 标签页。Play 是 实际存在漏洞的应用;其他则是培训材料。 - 成功利用漏洞会自动捕获 flag(在服务端进行, 基于真实的请求/响应状态 —— 而不是你可以从前端伪造的),并解锁该场景的 **Fix** 标签页。 - **Reset session(重置会话)**(通过 `POST /play/{id}/reset`)会清除你当前会话中 已捕获的 flag 以及该场景的所有专属状态。 在架构上,这与姊妹 LLM playground 采用相同的模式 —— 自动发现场景(只需在 `app/scenarios/` 中放入一个新文件夹,它就会被 自动拾取)、确定性的服务端 flag 验证,以及 每个场景模块对应一个 OWASP 类别。 ## 关于真实与模拟的说明 这里的一切都是针对**真实**运行代码的**真正**漏洞 —— SQL injection 会通过真实的未参数化查询命中实际的 sqlite3 数据库;JWT 伪造是使用真实的 PyJWT 针对该应用实际存在的(弱)签名 secret 进行验证的;而 XSS 则是真正未经转义的 HTML 渲染。 出于安全考虑,有两点是故意模拟而非完全真实的: - **SSRF (A01):** 头像导入器检测到看似内部的 hostname 并返回一个*虚假的*“已获取”结果 —— 它绝不会发出真实的出站 网络请求,因此即使意外操作,也无法实际用于触及真实的内部 基础设施。 - **A08(完整性失效):** 此场景使用没有签名校验的 JSON 设置恢复, 而不是真正的不安全反序列化(例如 Python `pickle`)远程代码执行演示。一个可运行的通过 pickle 实现 RCE 的 payload 是一种通用的、可直接转移的 exploit 原语,可用于攻击 *任何*反序列化不受信任数据的 Python 应用 —— 与受控的培训实验环境相比,这是一种实质上不同(且更广泛)的风险, 因此该场景在教授相同的缺失完整性校验 根本原因的同时,并未提供可复用的 RCE payload 生成器。 ## 架构 ``` app/ core/ db.py # real sqlite3 DB (for A05) + plain dict stores for the rest session.py # cookie-based session store layout.py # shared HTML page shell (Play/Objective/Hints/Fix tabs) scenarios/ base.py # Scenario dataclass every module implements a01_broken_access_control/ scenario.py # real FastAPI router with the vulnerable routes a02_security_misconfiguration/ ... main.py # dashboard, mounts each scenario's router, generic tab routes ``` 没有真实的用户账户,没有真实的支付处理,除了 进程内存外没有任何持久化。这是一个培训工具,而不是用于生产环境的 架构模板 —— 切勿在任何真实的应用中复用这些模式。 ## 环境要求 - Python 3.11+(如果不使用 Docker 运行) - Docker + Docker Compose(可选,推荐) ## 许可证 MIT —— 详见 `LICENSE`。欢迎参与贡献;请参阅 `CONTRIBUTING.md` 以及我们的 `CODE_OF_CONDUCT.md`。
标签:CISA项目, OPA, OWASP Top 10, Python, StruQ, Web安全, 安全, 无后门, 蓝队分析, 请求拦截, 超时处理, 逆向工具, 靶场