|
1 | | -# JavaSecLab 一款综合Java漏洞平台 |
| 1 | +#  JavaSecLab - 综合型 Java 漏洞靶场 |
2 | 2 |
|
3 | 3 | <div align="center"> |
4 | 4 | <a href="https://www.apache.org/licenses/LICENSE-2.0.html"><img src="https://img.shields.io/github/license/alibaba/transmittable-thread-local?color=blueviolet&logo=apache" alt="License"></a> |
5 | | - <a href="https://github.com/whgojp/JavaSecLab"><img alt="Release" src="https://img.shields.io/badge/Java-8-ff9900?logo=java"></a> |
6 | | - <a href="https://github.com/whgojp/JavaSecLab"><img src="https://img.shields.io/badge/Version-1.3-red.svg" alt="Version"></a> |
| 5 | + <a href="https://github.com/whgojp/JavaSecLab"><img alt="Java" src="https://img.shields.io/badge/Java-8-ff9900?logo=java"></a> |
| 6 | + <a href="https://github.com/whgojp/JavaSecLab"><img src="https://img.shields.io/badge/Version-1.5-red.svg" alt="Version"></a> |
7 | 7 | <a href="https://blog.csdn.net/weixin_53009585"><img src="https://img.shields.io/badge/Developed%20by-whgojp-purple.svg" alt="Developed by whgojp"></a> |
8 | | - <img src="https://img.shields.io/github/stars/whgojp/JavaSecLab?color=brightgreen&style=flat-square" alt="GitHub Repo stars"> |
| 8 | + <img src="https://img.shields.io/github/stars/whgojp/JavaSecLab?color=brightgreen&style=flat-square" alt="GitHub Repo stars"> |
9 | 9 | <img src="https://img.shields.io/github/forks/whgojp/JavaSecLab?style=blue" alt="GitHub forks"> |
10 | 10 | </div> |
11 | 11 |
|
| 12 | +[English](./README.md) |
12 | 13 |
|
13 | 14 | ---------------------------------------- |
14 | 15 |
|
15 | 16 | ## 项目介绍 |
16 | | - JavaSecLab是**一款综合型Java漏洞平台**,提供相关漏洞缺陷代码、修复代码、漏洞场景、审计SINK点、安全编码规范、漏洞流量分析,覆盖多种漏洞场景,友好用户交互UI…… |
17 | 17 |
|
18 | | - |
| 18 | +JavaSecLab 是一款面向应用安全学习、代码审计训练、开发安全培训和安全工具测试的综合型 Java 漏洞靶场。项目基于 Spring Boot 构建,围绕真实 Java Web 项目中常见的漏洞入口,提供缺陷代码、修复代码、漏洞场景、审计 Source/Sink、修复思路、安全编码说明和漏洞流量分析。 |
19 | 19 |
|
20 | | - |
21 | | - |
22 | | -## 面向人群 |
23 | | - |
24 | | -- 安全服务方面:帮助安全服务人员理解漏洞原理(产生、修复、审计),以及对应漏洞流量分析 |
25 | | - |
26 | | -- 甲方安全方面:可作为开发安全培训演示,友好的交互方式,帮助研发同学更容易理解漏洞 |
| 20 | +项目希望解决一个很实际的问题:不仅让使用者知道“漏洞怎么打”,也能看清“漏洞为什么会在代码里产生,以及应该如何修”。 |
27 | 21 |
|
28 | | -- 安全研究方面:各种漏洞的不同触发场景,可用于xAST等安全工具测试 |
| 22 | + |
29 | 23 |
|
| 24 | + |
30 | 25 |
|
31 | | -## 支持漏洞模块 |
32 | | - |
33 | | -- 跨站脚本攻击、跨站请求伪造、CORS、JSONP、URL重定向、XFF伪造、拒绝服务、XPATH注入 |
| 26 | +## 适用人群 |
34 | 27 |
|
35 | | -- SQL注入、任意文件系列、跨服务端请求伪造、XML实体注入、RCE |
| 28 | +- **安全服务人员**:用于讲解漏洞原理、触发方式、修复方案、审计路径和流量特征。 |
| 29 | +- **企业安全团队**:作为 SDL、DevSecOps、开发安全培训和安全意识建设的演示平台。 |
| 30 | +- **安全研究人员**:用于测试 SAST、DAST、IAST、RASP、SCA、xAST、可达性分析等安全工具。 |
| 31 | +- **Java 研发同学**:通过真实代码理解常见安全问题,避免只停留在抽象规范和检查清单。 |
36 | 32 |
|
37 | | -- 逻辑漏洞(IDOR、验证码安全、支付安全、并发安全)、敏感信息泄漏系列、登录对抗系列 |
| 33 | +## 漏洞模块 |
38 | 34 |
|
39 | | -- SPEL注入、SSTI注入、反序列化、组件漏洞 |
| 35 | +JavaSecLab 覆盖多类 Java Web 安全场景,包括: |
40 | 36 |
|
| 37 | +- 跨站脚本、跨站请求伪造、CORS、JSONP、URL 重定向、XFF 伪造、拒绝服务、XPath 注入 |
| 38 | +- SQL 注入、任意文件读取/上传/下载/删除、SSRF、XXE、RCE |
| 39 | +- 逻辑漏洞:越权访问、验证码安全、支付安全、并发安全 |
| 40 | +- 敏感信息泄漏、登录对抗、请求签名、JWT 凭证安全 |
| 41 | +- SpEL 表达式注入、SSTI 模板注入、Java 反序列化 |
| 42 | +- Fastjson、Jackson、XStream、Log4j2、Shiro、SnakeYAML、XMLDecoder 等组件与生态场景 |
| 43 | +- Spring Boot 生态暴露面:Swagger、Actuator、Druid、MySQL JDBC 反序列化等 |
41 | 44 |
|
42 | | -## 在线环境体验 |
| 45 | +## 在线体验 |
43 | 46 |
|
44 | | -http://whgojp.top/ |
| 47 | +在线地址:<http://whgojp.top/> |
45 | 48 |
|
46 | | -账号密码:admin/admin |
| 49 | +默认账号:`admin/admin` |
47 | 50 |
|
48 | | -## 项目灵感 |
| 51 | +> JavaSecLab 是漏洞靶场,包含故意保留的漏洞代码、危险依赖和不安全配置。自行部署时请放在隔离环境中,不建议直接暴露到公网。 |
49 | 52 |
|
50 | | - 曾在甲方单位工作过一段时间,有机会接触到完整的**漏洞生命周期**:很多次做完渗透测试后,通过(TAPD、Jira)发送工单通知研发同学修复漏洞,经常面临着一些问题:**1、研发不知道为什么这是个漏洞?2、研发不知道这个漏洞怎么修复?** |
51 | | - 由此,一个想法💡油然而生,恰巧自己也懂些开发知识,想着可不可以通过代码的方式让研发同学快速了解漏洞的产生与修复…… |
| 53 | +## 项目初衷 |
52 | 54 |
|
53 | | -> 平台提供相关漏洞的安全编码规范,甲方朋友在做SDL/DevSecOps建设的时候,可以考虑加入开发安全培训这一环节 |
| 55 | +作者曾在甲方单位接触过比较完整的漏洞生命周期:渗透测试或安全评估结束后,通过 TAPD、Jira 等系统把漏洞工单发送给研发同学修复。但在实际沟通过程中,经常会遇到两个问题: |
54 | 56 |
|
55 | | - 此外,自己也做过安全服务类项目,我想大部分朋友会和我一下,只是按照 信息收集->外网打点->发现漏洞->输出报告 这个流程测试,对于漏洞怎么产生、怎么修复,似乎并不关心…… |
| 57 | +1. 研发同学不知道为什么这是一个漏洞。 |
| 58 | +2. 研发同学不知道这个漏洞应该怎样修复。 |
56 | 59 |
|
57 | | - 代码审计过程中,通常是先定位SINK点(即代码执行或输出的关键位置),然后再回溯寻找对应的SOURCE点(即输入或数据来源的位置)。通过将SOURCE点和SINK点串联起来,来完成代码审计工作 |
| 60 | +JavaSecLab 的出发点就是把漏洞现象、代码缺陷、修复方案和审计思路串起来。相比只给出文字报告或 PoC,本项目更强调从代码视角理解漏洞产生的原因。 |
58 | 61 |
|
59 | | -> 平台针对每种漏洞提供对应缺陷代码、多种安全安全修复方式(例如:1、升级修复 2、非升级修复),同时针对代码审计,平台也提供相关漏洞的SINK点 |
| 62 | +在代码审计中,常见方法是先定位 **Sink 点**,例如命令执行、SQL 执行、文件访问、模板渲染、反序列化、响应输出等关键位置;再向上回溯 **Source 点**,例如请求参数、Header、Cookie、上传文件、序列化数据、数据库内容等输入来源。JavaSecLab 的很多场景都围绕 Source 到 Sink 的链路设计,便于学习和工具验证。 |
60 | 63 |
|
61 | | - 再后来,接触了应用安全产品,SCA、SAST、DAST、RASP等,看待安全漏洞似乎又是另一种角度,对于客户来说,采购的安全工具,无论是扫源码、容器、镜像……,都希望尽可能的扫到更多的漏洞,当然也希望少点误报,笔者也或多或少接触到可达性分析等相关技术,项目中也针对每种漏洞编写了不同的触发场景,感兴趣的朋友可以测试一下…… |
| 64 | +同一种漏洞在真实业务中往往有多种触发路径。因此项目也尽量为核心漏洞补充多个场景,帮助使用者理解不同代码写法、框架特性和业务流程下的风险差异。 |
62 | 65 |
|
63 | | -> 平台针对同种漏洞提供多种触发场景 |
| 66 | +## 流量分析 |
64 | 67 |
|
65 | | -🆕 更新漏洞流量分析模块,方便师傅们参考学习,以本项目漏洞流量为例,如果您有更好的漏洞流量数据包,欢迎提PR参与项目🌹 |
| 68 | +项目内置了部分漏洞流量分析内容,方便结合请求包、响应包和代码行为理解漏洞特征。如果你有更清晰的漏洞流量包、复现说明或分析样例,欢迎提交 PR 一起完善。 |
66 | 69 |
|
67 | 70 |  |
68 | 71 |
|
69 | | -这里以延时注入为例:可以从响应时间明显的看到其流量特征:5秒后服务器响应 |
| 72 | +以延时注入为例,可以从响应时间上观察到明显特征:服务端约 5 秒后返回响应。 |
70 | 73 |
|
71 | 74 |  |
72 | 75 |
|
73 | | -## 技术架构 |
| 76 | +## 技术栈 |
74 | 77 |
|
75 | | - SpringBoot + Spring Security + MyBatis + Thymeleaf + Layui |
| 78 | +- Spring Boot |
| 79 | +- Spring Security |
| 80 | +- MyBatis / MyBatis-Plus |
| 81 | +- JPA / Hibernate |
| 82 | +- Thymeleaf |
| 83 | +- Layui |
| 84 | +- MySQL |
76 | 85 |
|
77 | 86 | ## 部署方式 |
78 | 87 |
|
79 | | -先clone下项目代码 |
| 88 | +克隆项目: |
80 | 89 |
|
81 | 90 | ```shell |
82 | 91 | git clone https://github.com/whgojp/JavaSecLab.git |
| 92 | +cd JavaSecLab |
83 | 93 | ``` |
84 | 94 |
|
85 | | - |
| 95 | + |
86 | 96 |
|
87 | | -### 本地部署-IDEA |
| 97 | +### 本地部署 IDEA |
88 | 98 |
|
89 | | -> JDK环境 1.8 |
| 99 | +环境要求: |
90 | 100 |
|
91 | | -1. 配置数据库(**Mysql 8.0+**) |
| 101 | +- JDK 8 |
| 102 | +- MySQL 8.0+ |
| 103 | +- Maven |
92 | 104 |
|
93 | | - 执行 sql/JavaSecLab.sql 文件 |
94 | | - |
95 | | - 修改配置文件application.yml active为dev(项目默认为docker 如果搭建的过程中出现数据库连接错误 师傅们可以注意下这里) |
| 105 | +1. 创建数据库并导入 [sql/JavaSecLab.sql](./sql/JavaSecLab.sql)。 |
| 106 | +2. 修改 [src/main/resources/application.yml](./src/main/resources/application.yml),将环境切换为 `dev`: |
96 | 107 |
|
97 | 108 | ```yaml |
98 | 109 | spring: |
99 | | - # 环境 dev|docker |
100 | 110 | profiles: |
101 | 111 | active: dev |
102 | 112 | ``` |
103 | | - |
104 | | -2. 修改application-dev.yml配置文件 |
105 | 113 |
|
106 | | -```yaml |
107 | | -username: root |
108 | | -password: QWE123qwe |
109 | | -url: jdbc:mysql://localhost:13306/JavaSecLab?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true |
110 | | -``` |
| 114 | +3. 修改 [src/main/resources/application-dev.yml](./src/main/resources/application-dev.yml) 中的数据库连接信息: |
111 | 115 |
|
112 | | -<img src="./pic/login.png" alt="logo" style="zoom:100%;" /> |
| 116 | + ```yaml |
| 117 | + username: root |
| 118 | + password: QWE123qwe |
| 119 | + url: jdbc:mysql://localhost:13306/JavaSecLab?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true |
| 120 | + ``` |
| 121 | +
|
| 122 | +4. 使用 IDEA 启动项目,或通过 Maven 启动。 |
| 123 | +
|
| 124 | +默认账号:`admin/admin` |
113 | 125 |
|
114 | | -初始账号密码:admin/admin(后台可修改) |
| 126 | + |
115 | 127 |
|
116 | | -### Docker部署(推荐) |
| 128 | +### Docker 部署 |
117 | 129 |
|
118 | | -> 条件:已安装docker和docker-compose |
119 | | -> |
120 | | -> docker部署过程中 sql文件没有初始化执行的话(即数据库为空) 需要手动导入下sql文件 |
| 130 | +环境要求: |
| 131 | + |
| 132 | +- Docker |
| 133 | +- Docker Compose |
| 134 | + |
| 135 | +构建并启动: |
121 | 136 |
|
122 | 137 | ```shell |
123 | 138 | mvn clean package -DskipTests |
124 | 139 | docker-compose -p javaseclab up -d |
125 | 140 | ``` |
126 | 141 |
|
127 | | - |
| 142 | +如果容器启动后数据库为空,请手动导入 [sql/JavaSecLab.sql](./sql/JavaSecLab.sql)。 |
128 | 143 |
|
129 | | - |
| 144 | + |
130 | 145 |
|
131 | | -更多部署方案、部署问题解答详见:[部署指南](https://github.com/whgojp/JavaSecLab/wiki/%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97) |
| 146 | + |
132 | 147 |
|
133 | | -## 开源协议 |
| 148 | +更多部署方案和常见问题见:[部署指南](https://github.com/whgojp/JavaSecLab/wiki/%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97) |
134 | 149 |
|
135 | | - **When we speak of free software, we are referring to freedom, not price.** |
| 150 | +## 安全提示 |
136 | 151 |
|
137 | | -本项目遵循 [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) 协议,详细的许可证内容请参见项目中的 [LICENSE](./LICENSE) 文件。 |
| 152 | +JavaSecLab 为漏洞靶场项目,包含故意保留的危险接口、漏洞依赖和不安全配置。请只在本地或隔离网络中运行。 |
138 | 153 |
|
139 | | -## 更新记录 |
| 154 | +建议注意: |
| 155 | + |
| 156 | +- 不要把靶场直接部署到公网。 |
| 157 | +- 使用一次性账号、测试数据库和隔离容器环境。 |
| 158 | +- 不要把宿主机敏感目录挂载进容器。 |
| 159 | +- 启动 Docker Compose 前检查暴露端口。 |
| 160 | +- 将上传文件、生成文件和日志都视为不可信数据。 |
| 161 | + |
| 162 | +项目中的安全修复代码用于教学和演示,真实业务系统通常还需要结合鉴权、审计、限流、数据校验、依赖治理、监控告警和纵深防御。 |
| 163 | + |
| 164 | +## 贡献 |
| 165 | + |
| 166 | +欢迎提交 Issue 或 Pull Request。比较适合贡献的内容包括: |
| 167 | + |
| 168 | +- 新漏洞场景,以及对应的缺陷代码和修复代码 |
| 169 | +- 更准确的 Source/Sink 说明和代码审计笔记 |
| 170 | +- 更清晰的漏洞流量包和流量分析说明 |
| 171 | +- 部署问题修复和文档改进 |
| 172 | +- 更适合教学演示的交互和页面优化 |
| 173 | + |
| 174 | +## 开源协议 |
| 175 | + |
| 176 | +**When we speak of free software, we are referring to freedom, not price.** |
140 | 177 |
|
141 | | -项目的详细更新记录请参阅 [更新日志](https://github.com/whgojp/JavaSecLab/wiki/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97) |
| 178 | +本项目遵循 [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) 协议,详细内容请参见 [LICENSE](./LICENSE)。 |
142 | 179 |
|
143 | | -## 一些Tips🙋 |
| 180 | +## 更新记录 |
144 | 181 |
|
145 | | -1. 安全问题:由于是漏洞靶场,因此不建议搭建在公网上使用 |
146 | | -1. 项目中的安全修复代码仅供参考,实际业务中漏洞修复起来可能要复杂的多…… |
147 | | -1. **问题/建议反馈:如果遇到一些项目问题或者更好的建议,欢迎各位师傅可以提Issue或加交流群进行反馈** |
148 | | -1. **看到这里,师傅觉得项目有用的话,麻烦动动手点个star吧,非常感谢🙏** |
| 182 | +项目详细更新记录见:[更新日志](https://github.com/whgojp/JavaSecLab/wiki/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97) |
149 | 183 |
|
150 | 184 | ## 关于作者 |
151 | 185 |
|
152 | 186 | 作者博客:[今天是几号](https://blog.csdn.net/weixin_53009585) |
153 | 187 |
|
154 | | -**如果师傅同样对开发安全、应用安全、SDL、漏洞靶场等感兴趣的话,欢迎加交流群一起探讨……** |
| 188 | +如果你同样关注应用安全、开发安全、SDL、DevSecOps 或漏洞靶场,欢迎加入交流群一起讨论。 |
155 | 189 |
|
156 | 190 | <div style="text-align: center;"> |
157 | | - <img src="./pic/wechat.png" alt="description" width="271" height="366" /> |
158 | | - <img src="./pic/group.png" alt="description" width="271" height="366" /> |
| 191 | + <img src="./pic/wechat.png" alt="WeChat" width="271" height="366" /> |
| 192 | + <img src="./pic/group.png" alt="Community group" width="271" height="366" /> |
159 | 193 | </div> |
160 | 194 |
|
161 | | - |
162 | 195 | ## 赞助开源 |
163 | 196 |
|
164 | | - 如果您觉得这个工具对您有帮助,不妨考虑支持一下作者的开发工作。您的赞助将用于维护在线服务器和持续优化项目功能,非常感谢您的鼓励和支持! |
| 197 | +如果 JavaSecLab 对你有帮助,欢迎支持作者继续维护。赞助将用于在线环境维护和项目功能持续优化,感谢你的鼓励和支持。 |
165 | 198 |
|
166 | 199 | <div style="text-align: center;"> |
167 | | - <img src="./pic/donate.jpg" style="width: 40%; height: auto;"/> |
168 | | - </div> |
169 | | - |
170 | | - |
| 200 | + <img src="./pic/donate.jpg" alt="Sponsor JavaSecLab" style="width: 40%; height: auto;"/> |
| 201 | +</div> |
0 commit comments