Paulo-Marcos-Lucio/laboratorio-owasp

GitHub: Paulo-Marcos-Lucio/laboratorio-owasp

一个以 Spring Boot 漏洞-攻击-修复三阶段对照为特色的 OWASP Top 10 实践教学项目,通过 JUnit 测试验证每类漏洞的复现与修复效果。

Stars: 1 | Forks: 0

Laboratório OWASP — a cultura que pulsa no laboratório submerso: OWASP Top 10 hands-on (vulnerável, exploit, corrigido)
# 🧪 OWASP 实验室 ### OWASP Top 10 中的每一个漏洞分为**三个阶段**:漏洞版 → exploit → 修复版。 *这是一个基于 **Spring Boot** 的应用,其中每个漏洞都存在于两个 endpoint 中——`/vulneravel` 和 `/corrigido`——并且有一个**自动化测试证明**该 exploit 在漏洞版本中有效,而在修复版本中被拦截。这就是 Java 技术栈中以可执行代码呈现的“诊断与修复”。* [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/Paulo-Marcos-Lucio/laboratorio-owasp/actions/workflows/ci.yml) [![Java](https://img.shields.io/badge/Java-21-ED8B00?logo=openjdk&logoColor=white)](https://openjdk.org/) [![Spring Boot](https://img.shields.io/badge/Spring_Boot-3.3-6DB33F?logo=springboot&logoColor=white)](https://spring.io/projects/spring-boot) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![OWASP Top 10](https://img.shields.io/badge/OWASP-Top_10-000000.svg)](https://owasp.org/Top10/)
## ⚠️ 警告 本应用出于教育目的**刻意包含**了安全漏洞。**请勿将其暴露在互联网上。**请在本地运行。 ## 🎯 理念 阅读关于漏洞的资料是一回事;**看到 exploit 实际生效**,然后再**看到修复方案拦截它**则是另一回事。这里的每一个模块都是一对: - `…/vulneravel` —— 不安全的实现,带有解释错误的注释。 - `…/corrigido` —— 具有相同功能的安全实现。 - 一个**测试**,触发真实的 exploit 并断言双方的行为表现。 如果测试通过,演示就是真实的:漏洞是真实的,修复也是有效的。 ## 🗂️ 漏洞列表 | OWASP | 漏洞 | 位置 | 证明测试 | | --- | --- | --- | --- | | **A03** | SQL Injection (CWE-89) | [`a03sqli`](src/main/java/br/com/paulomarcos/labowasp/a03sqli) | [`SqlInjectionTest`](src/test/java/br/com/paulomarcos/labowasp/SqlInjectionTest.java) | | **A03** | 反射型 XSS (CWE-79) | [`a03xss`](src/main/java/br/com/paulomarcos/labowasp/a03xss) | [`XssTest`](src/test/java/br/com/paulomarcos/labowasp/XssTest.java) | | **A03** | Command Injection (CWE-78) | [`a03cmd`](src/main/java/br/com/paulomarcos/labowasp/a03cmd) | [`CommandInjectionTest`](src/test/java/br/com/paulomarcos/labowasp/CommandInjectionTest.java) | | **A01** | IDOR — 失效的访问控制 (CWE-639) | [`a01idor`](src/main/java/br/com/paulomarcos/labowasp/a01idor) | [`IdorTest`](src/test/java/br/com/paulomarcos/labowasp/IdorTest.java) | | **A01** | Path Traversal (CWE-22) | [`a01path`](src/main/java/br/com/paulomarcos/labowasp/a01path) | [`ArquivoServiceTest`](src/test/java/br/com/paulomarcos/labowasp/ArquivoServiceTest.java) | | **A01** | Open Redirect (CWE-601) | [`a01redirect`](src/main/java/br/com/paulomarcos/labowasp/a01redirect) | [`OpenRedirectTest`](src/test/java/br/com/paulomarcos/labowasp/OpenRedirectTest.java) | | **A02** | 弱密码 Hash:MD5 → BCrypt (CWE-916) | [`a02crypto`](src/main/java/br/com/paulomarcos/labowasp/a02crypto) | [`HashSenhaTest`](src/test/java/br/com/paulomarcos/labowasp/HashSenhaTest.java) | | **A10** | SSRF (CWE-918) | [`a10ssrf`](src/main/java/br/com/paulomarcos/labowasp/a10ssrf) | [`SsrfTest`](src/test/java/br/com/paulomarcos/labowasp/SsrfTest.java) | ## 🚀 运行 需要 **Java 21+**。(或者使用 Docker:`docker run --rm -v "$PWD":/app -w /app maven:3.9-eclipse-temurin-21 mvn test`。) ``` ./mvnw spring-boot:run # ou: mvn spring-boot:run ``` ### 查看并排展示的 exploit 和修复 ``` # A03 — SQL Injection:payload 返回整个表... curl "http://localhost:8080/a03/sqli/vulneravel?nome=Notebook' OR '1'='1" # ...而参数化版本返回空: curl "http://localhost:8080/a03/sqli/corrigido?nome=Notebook' OR '1'='1" # A03 — XSS:`" curl "http://localhost:8080/a03/xss/corrigido?q=" # A03 — Command Injection:"&& echo" 执行了第二个命令(存在漏洞) vs. 400(已修复) curl "http://localhost:8080/a03/cmd/vulneravel?host=127.0.0.1 && echo INJETADO" curl -i "http://localhost:8080/a03/cmd/corrigido?host=127.0.0.1 && echo INJETADO" # A01 — IDOR:bob 读取了 alice 的成绩(存在漏洞) vs. 403(已修复) curl -H "X-Usuario: bob" http://localhost:8080/a01/idor/vulneravel/1 curl -i -H "X-Usuario: bob" http://localhost:8080/a01/idor/corrigido/1 # A01 — Open Redirect:重定向到外部目标(存在漏洞) vs. 400(已修复) curl -i "http://localhost:8080/a01/redirect/vulneravel?destino=https://site-falso.example" curl -i "http://localhost:8080/a01/redirect/corrigido?destino=https://site-falso.example" # A10 — SSRF:服务器获取云元数据的 IP(存在漏洞) vs. 400(已修复) curl "http://localhost:8080/a10/ssrf/vulneravel?url=http://169.254.169.254/latest/meta-data/" curl -i "http://localhost:8080/a10/ssrf/corrigido?url=http://169.254.169.254/latest/meta-data/" ``` ### 运行测试(证明) ``` mvn test ``` ## 🏗️ 组织结构 ``` src/main/java/.../labowasp/ ├── a01idor/ IDOR — verificação de propriedade do recurso ├── a01path/ Path Traversal — normalização + confinamento ao diretório-base ├── a01redirect/ Open Redirect — só aceita caminho relativo ao próprio app ├── a02crypto/ Hash de senha — MD5 (errado) vs BCrypt (certo) ├── a03cmd/ Command Injection — shell com entrada concatenada vs allowlist sem shell ├── a03sqli/ SQL Injection — concatenação vs consulta parametrizada ├── a03xss/ XSS — reflexão crua vs codificação de saída └── a10ssrf/ SSRF — busca de URL arbitrária vs allowlist de host + bloqueio de IP interno ``` 每个修复都应用了**正确的原则**,而不是简单的补丁:查询参数化、输出编码、基于属性的授权、路径限制、仅限内部目的地的重定向、通过白名单验证且不将输入传递给 shell、使用主机白名单并阻止内部地址(loopback/private/metadata)以及带盐的慢速 Hash。 ## ⚖️ 道德规范使用 本材料为**教学和防御性质**。其中涉及的 exploit 技术仅用于理解和修复漏洞——请仅在本实验室或您已获授权测试的系统中使用。 ## 📄 许可证 [MIT](LICENSE) © 2026 Paulo Marcos Lucio。
AppSec 套件的一部分——与 SentinelaGuardiãoChaveiroEsteira 并列。
标签:CISA项目, JUnit测试, OWASP Top 10, Spring Boot, Web安全, 域名枚举, 安全教学, 漏洞复现, 蓝队分析, 请求拦截