综合练习
威胁建模 + 事件响应 Runbook 演练。
综合实战:靶场通关、漏洞复现与平台加固
这一课你将能做到
- 独立完成 DVWA 高难度关卡,串联整门课的攻防知识
- 在本地环境安全复现一个真实 CVE(Log4Shell),理解依赖漏洞的工程意义
- 为 Spring Boot 平台执行一份 20 项安全检查清单并输出加固报告
为什么要学
知识只有串成实战才属于你。这门课你学了侦察、加固、加密、认证、攻击、防御、应急、云与合规——本课用三个综合练习把它们焊在一起:靶场通关练「攻的视角」,CVE 复现练「依赖风险」,平台加固练「守的落地」。这也是你整理安全作品集的起点:一份复现报告 + 一份加固清单,面试时比任何口号都有说服力。
先建立图像
本课的实战闭环:
学攻击(DVWA) ──▶ 理解漏洞机理
│
学复现(Log4Shell) ──▶ 理解供应链风险:一个依赖 = 全站命门
│
学加固(Checklist) ──▶ 把防御固化到 CI/CD 与代码评审
▼
输出作品集:复现报告 + 加固记录
跟着做
练习一:DVWA 通关(把攻击链走完整)
docker run --rm -it -d -p 80:80 vulnerables/web-dvwa
# Security 等级逐级提升:low → medium → high
每个关卡对照课程模块:
SQL Injection → cs-threats:参数化为什么根治注入
Brute Force → cs-defense:为什么登录要限流+锁定
File Upload → cs-threats:上传校验(白名单+重命名+隔离存储)
File Inclusion → cs-network:路径穿越与配置收敛
CSRF → cs-identity:SameSite 与 Token 的取舍
Command Injection → cs-os:最小权限让 RCE 无法提权
high 难度下每关都打不动,说明防御到位——把「为什么打不动」写下来,比打穿更有价值。
练习二:本地复现 Log4Shell(CVE-2021-44228)
仅在你自己的 Docker 环境内复现,payload 不指向任何真实外部系统。
# 准备一个含旧版 log4j-core(2.14.1) 的 Spring Boot Demo
# log4j2.xml 保持默认,应用日志会记录用户输入
docker build -t log4shell-lab .
docker run -d -p 8080:8080 log4shell-lab
# 攻击面:任何会被 log4j 记录的输入(User-Agent、搜索框、日志里的用户名)
# 经典 payload 形如:${jndi:ldap://127.0.0.1:1389/Exploit}
# 本地起一个 LDAP 服务模拟(自建测试,不出网)
docker run --rm -p 1389:1389 marcnuri demos...
简化演示(不引入外部 LDAP):
// Demo 接口:把用户输入直接 log.info(out) —— 命中漏洞路径
log.info("search query: {}", userInput);
// userInput = "${jndi:ldap://127.0.0.1:1389/x}" 时,
// log4j 会解析查找表达式并尝试外连 —— 这就是 RCE 的入口
# 验证修复:升级到 log4j-core ≥ 2.17.1 或设置
# -Dlog4j2.formatMsgNoLookups=true(临时缓解)
mvn versions:use-latest-versions -Dincludes=org.apache.logging.log4j
# 复盘三问:哪个依赖带的?怎么发现的?CI 里怎么挡住?
练习三:平台安全加固清单(20 项走一遍)
认证与授权
□ 1. JWT 算法服务端固定,不信任 header 的 alg
□ 2. access token 短期 + refresh 可吊销(Redis 黑名单)
□ 3. 所有管理接口 @PreAuthorize 双重校验(网关+方法级)
□ 4. 登录失败锁定 + 图形/滑块验证码
输入与注入
□ 5. SQL 全参数化,全局 grep 排查 ${} 使用点
□ 6. 所有富文本输出走白名单消毒
□ 7. 文件上传:白名单后缀+魔数校验+重命名+隔离目录
□ 8. SSRF:出站 URL 白名单,禁止访问内网/链路本地地址
传输与存储
□ 9. 全站 HTTPS + HSTS
□ 10. 密码 BCrypt 成本因子 ≥ 10
□ 11. 敏感字段(手机号等)加密存储 + 日志脱敏
□ 12. 生产配置零明文密钥(环境变量/KMS)
接口与可用性
□ 13. 登录/注册/短信接口按 IP+用户限流(429+Retry-After)
□ 14. Actuator 生产关闭或独立端口+认证
□ 15. 错误响应统一脱敏(不回显堆栈/SQL)
□ 16. CORS 白名单精确到域名,禁止 *
审计与响应
□ 17. 安全日志独立落盘:登录成败/鉴权失败/限流触发
□ 18. 日志留存 ≥ 6 个月
依赖与流程
□ 19. CI 集成 dependency-check + SpotBugs-Security,阻断高危
□ 20. 事件响应 Runbook 存在且演练过一次