基于 Vue + SpringBoot 构建的前后端分离的 Java 安全靶场。
前端工程是基于流行的vue-admin-template基础模板进行改改改,后端工程是基于JDK11+SpringBoot 2.7.14开发。
支持 admin 和 guest 两种角色,菜单与接口均实现权限隔离,可用于模拟不同权限等级的攻击场景。


共 21 个漏洞分类、64 个实验场景
| 模块 | 场景数 | 亮点 |
|---|---|---|
| SQL 注入 | 8 | Jdbc · MyBatis · 盲注 · 二次注入 |
| XSS | 3 | 反射 · 存储 · DOM |
| CSRF | 1 | 跨站请求伪造 |
| 命令执行 | 2 | Runtime · ProcessBuilder |
| 批量赋值 | 1 | Mass Assignment |
| GraphQL | 3 | 字段泄漏 · 越权 · SQLi |
| SSRF | 1 | 服务端请求伪造 |
| 任意 URL 跳转 | 1 | Open Redirect |
| 路径穿越 | 2 | 目录穿越 · ZIP Slip |
| 文件上传 | 1 | 不安全上传 |
| 文件包含 | 1 | 本地 · 远程包含 |
| 反序列化 | 1 | 不安全反序列化 |
| SSTI | 1 | Thymeleaf 模板注入 |
| XML 安全 | 5 | XXE · XPath · 炸弹 · SSRF via XXE · XInclude |
| 越权漏洞 | 3 | 水平越权 · 垂直越权 · 未授权 |
| 身份认证 | 8 | 暴力破解 · 短信 · MFA |
| JWT | 4 | 弱密钥 · None 算法 · 算法混淆等 |
| 组件漏洞 | 7 | Fastjson · Log4j2 · Shiro-550 · XStream… |
| 配置漏洞 | 4 | 列目录 · Actuator · Swagger · CORS |
| 其他漏洞 | 8 | SpEL · ReDoS · LDAP · IP 伪造 · 科学计数法 DoS · CRLF 注入 · 点击劫持 · Host Header 注入 |
| 密码安全 | 1 | 可预测随机数(种子可预测) |
提供两种部署方式,按需选择:
| 方式 | 适合场景 | 耗时 |
|---|---|---|
| 方式一:预构建镜像(推荐,分钟级启动) | 快速体验,无需本地编译 | ⚡ 快(仅下载镜像) |
| 方式二:源码构建 | 需要修改源码、二次开发 | 慢(需编译 Java + 打包前端) |
无需 JDK / Maven / Node —— 镜像由 GitHub Actions 构建并发布至 GHCR,拉取即可运行。
1、克隆并启动(仅需后端仓库中的 Compose 配置)
git clone https://github.com/bansh2eBreak/SpringVulnBoot-backend.git
cd SpringVulnBoot-backend
docker compose -f docker-compose.prebuilt.yml up -d
2、访问服务
| 服务 | 地址 |
|---|---|
| 前端 UI | http://localhost |
| 后端 API | http://localhost:8080 |
3、更新到最新版本
docker compose -f docker-compose.prebuilt.yml pull
docker compose -f docker-compose.prebuilt.yml up -d
从源码构建可完整定制代码,适合二次开发或代码审计学习。
1、克隆前后端项目到同级目录
# 创建项目目录
mkdir SpringVulnBoot && cd SpringVulnBoot
# 克隆前端项目
git clone https://github.com/bansh2eBreak/SpringVulnBoot-frontend.git
# 克隆后端项目
git clone https://github.com/bansh2eBreak/SpringVulnBoot-backend.git
2、启动服务(首次启动需下载依赖并编译,耗时较长)
# 进入后端项目目录
cd SpringVulnBoot-backend
# 构建镜像并启动所有服务
docker compose up -d
3、访问服务
| 服务 | 地址 |
|---|---|
| 前端 UI | http://localhost |
| 后端 API | http://localhost:8080 |
为什么更新时需要重建数据库 Volume?
MySQL 容器通过
docker-entrypoint-initdb.d/目录中的db.sql来初始化数据库,但该初始化脚本只在数据目录为空时执行一次。由于项目使用了具名 Volume(mysql-data)持久化数据,容器重启后 MySQL 检测到数据目录已存在,会直接跳过初始化脚本。因此,当靶场版本更新涉及数据库结构变更(新增表、修改字段等)时,必须先删除旧的 Volume,让 MySQL 重新执行最新的
db.sql。
# 进入后端项目目录
cd SpringVulnBoot-backend
# 拉取最新代码
git pull
# 1. 停止并删除所有容器及 Volume(⚠️ 会清空数据库数据)
docker compose down -v
# 2. 重新构建镜像并启动(MySQL 会自动执行最新的 db.sql)
docker compose up -d --build
💡 如果不想丢失数据库中的自定义数据,也可以手动进入 MySQL 容器执行增量 SQL:
```bash docker exec -it springvulnboot-mysql mysql -uroot -pRoot1234 SpringVulnBoot
然后手动执行 db.sql 中新增的建表/插入语句
```

$ claude mcp add SpringVulnBoot-backend \
-- python -m otcore.mcp_server <graph>