OWASP VulnerableApp
破解它。扫描它。复现它。以它为基准进行测试。改进它。
OWASP VulnerableApp 是一个模块化的、刻意包含漏洞的应用程序,主要用于通过可复现的测试场景验证和基准测试安全扫描器,同时也支持学习和实验。
🔍 它有什么不同
与传统的漏洞应用不同,VulnerableApp 被设计成一个可测试的安全生态系统,而不是一个静态的训练应用。
它支持:
- 🔬 为 Burp Suite、OWASP ZAP 以及自定义 DAST 引擎等工具进行扫描器基准测试
- 🧩 模块化漏洞设计,无需修改核心服务即可添加新的漏洞场景
- 📊 跨版本和跨环境的安全回归测试
- 🎯 针对现代 Web 应用模式的真实攻击面模拟
- 🧪 确定性的漏洞行为,确保扫描结果可重复
- 🧠 专为安全工程师、研究人员和教育工作者打造

VulnerableApp 可以帮助你:
- 验证安全工具在已知漏洞模式下的行为
- 构建用于安全实验的可控环境
- 随着新攻击技术的出现扩展漏洞覆盖范围
- 运行一致、可重复的安全测试流水线
⚙️ 为什么它很重要
大多数漏洞应用都是:
- 静态的
- 难以扩展
- 仅为手动学习而设计
VulnerableApp 的设计目标是:
自动化、可复现性和持续演进
用户界面

运行项目
有两种方式可以运行该项目:
- 最简单的方式是使用 Docker 容器,它将运行包含所有组件的完整 VulnerableApplication。使用 Docker 运行时,请按照以下步骤:
- 下载并安装 Docker Compose
- 克隆此 GitHub 仓库
- 打开终端并进入项目根目录
- 运行命令:
docker-compose pull && docker-compose up - 打开浏览器访问
http://localhost,即可进入 VulnerableApp 用户界面。 - Mailpit 也可通过
http://localhost:8025访问,用于查看本地 SMTP 服务器捕获的电子邮件。
注意:以上步骤运行的是最新的未发布版本。如果希望运行最新正式发布版本,请使用 Docker 的 latest 标签。
- 另一种方式是以独立 Vulnerable Application 的形式运行:
- 前往 GitHub 的 Releases 页面,下载最新发布版本的 Jar 文件
- 打开终端并进入项目根目录
- 运行命令:
java -jar VulnerableApp-* - 打开浏览器访问
http://localhost:9090/VulnerableApp,即可进入 VulnerableApp 的传统(Legacy)用户界面。
构建项目
该项目有两种构建和使用方式:
- 构建为 Docker 应用,以运行完整的 VulnerableApplication。步骤如下:
- 运行
./gradlew jibDockerBuild构建 Docker 镜像 - 下载 Docker-Compose,并在相同目录中运行
docker-compose up - 打开浏览器访问
http://localhost,即可进入 VulnerableApp 用户界面。
- 运行
- 构建为 Spring Boot 应用,它将运行传统 UI 或 REST API,同时便于调试和排查问题。这也是最简单的方法:
- 将项目导入你喜欢的 IDE 并运行
- 打开浏览器访问:
http://localhost:9090/VulnerableApp,即可进入 VulnerableApp 的传统用户界面,用于调试和测试。
为项目做贡献
你可以通过多种方式参与项目:
- 如果你是开发者并准备参与项目,建议查看 issues 列表,其中带有
good first issue标签的问题非常适合作为入门任务。 - 如果你是开发者或安全专业人员,希望添加新的漏洞类型,可以运行
./gradlew GenerateSampleVulnerability生成漏洞示例模板。该模板包含占位符和注释。修改后的文件可在命令日志或 GitHub 提交历史中查看。进入这些文件,填写占位内容,然后重新构建项目即可查看修改效果。 - 如果你希望通过宣传项目或推动项目发展来贡献力量,欢迎在 Discussions 或 Issues 中提出你的想法,我们很乐意一起讨论。
使用现代 UI 测试
VulnerableApp-facade 为 VulnerableApp 提供了现代化用户界面。如需使用现代 UI 测试本地修改:
- 前提条件:确保已安装 Docker 和 Docker-Compose。
- 运行测试脚本:
- Windows:
.\scripts\testWithModernUI.bat - Linux/Mac:
./scripts/testWithModernUI.sh
- Windows:
该脚本会将你的本地修改构建为 Docker 镜像(sasanlabs/owasp-vulnerableapp:unreleased),并使用 docker-compose.local.yml 启动完整的技术栈(包括 facade、jsp 和 php 服务)。
-
访问 UI:打开
http://localhost查看包含你修改内容的现代 UI。 -
访问 Mailpit:打开
http://localhost:8025查看本地 SMTP 服务器捕获的电子邮件。
使用的技术
- Java17
- Spring Boot
- ReactJS
- JavaScript/TypeScript
连接到内置 H2 数据库
要在浏览器中访问数据库,请访问:http://localhost:9090/VulnerableApp/h2
数据库连接属性:
JDBC Url: jdbc:h2:mem:testdb
User Name: admin
Password: hacker
当前支持的漏洞类型
- JWT 漏洞
- 命令注入(Command Injection)
- 密码学失败(Cryptography Failures)
- 文件上传漏洞
- 路径遍历漏洞
- SQL 注入
- XSS
- XXE
- 开放重定向(Open Redirect)
- SSRF
- IDOR(不安全直接对象引用)
- 点击劫持(Clickjacking)
- LDAP 注入
- 身份验证漏洞
对你的扫描器进行基准测试
VulnerableApp 内置了一个比较器,可将扫描器发现的问题与项目内置的真实漏洞基准进行对比,并生成覆盖率 / 漏检 / 未匹配报告。DAST 和 SAST 扫描器均支持通过同一个接口进行测试:
- 接口:
POST http://<baseurl>/VulnerableApp/scanner/benchmark - 请求体 —— 根据你的扫描器选择相应格式:
- DAST:
{ tool, scanType: "DAST", findings: [ { url, type, cwe, wascId } ] }(scanType可选,默认值为DAST;type、cwe、wascId均为可选字段——任意一个维度匹配即可) - SAST:
{ tool, scanType: "SAST", findings: [ { filePath, line, cwe, type } ] }
- DAST:
- 响应体以及磁盘上的
benchmarks/<tool>-results.json:覆盖率报告
扫描器本身的运行不在本项目范围内——你只需提供 JSON。完整的输入/输出 Schema、匹配规则、规范化漏洞类型词汇表以及 curl 示例,请参阅: benchmarks/README.md
联系方式
如果你在任何步骤中遇到困难,或者对项目及其目标有任何疑问,欢迎发送邮件至 karan.sasan@owasp.org,或者提交一个 issue,我们将尽力提供帮助。
文档与参考资料
博客
- OWASP VulnerableApp 概述 - Medium 文章
- OWASP VulnerableApp 概述 - Blogspot 文章
- Kenji Nakajima 对 OWASP VulnerableApp 的介绍
- 基于生成式 AI 的平台 Shannon 利用 VulnerableApp
- 我构建了 OWASP ZAP 文件上传插件:为什么必须先有 VulnerableApp-Facade