# OWASP Top 10 学习导读与实验对照表 > 当前主流版本:**OWASP Top 10:2021**(2017版已淘汰,但很多企业仍按2017考核,本文两版都标注) > 学习方法:每个条目按「原理 → 攻击场景 → 复现实验 → 防御 → 代码审计点」五步走,配合Vulhub动手复现。 ## 一、2021版十大类总览(速记) |编号|类别|一句话核心|2017对应| |---|---|---|---| |A01|失效的访问控制|越权/未授权,最容易被利用|A5| |A02|加密机制失效|明文传输/弱加密/硬编码密钥|A3| |A03|注入|SQL/命令/XPath注入|A1| |A04|不安全设计|架构设计缺陷(业务逻辑漏洞)|新增| |A05|安全配置错误|默认口令/目录列出/调试开启|A6| |A06|易受攻击和过时的组件|依赖库有漏洞(Log4j/Fastjson)|A9| |A07|身份识别和认证失败|弱口令/会话固定/爆破|A2+A7| |A08|软件和数据完整性故障|反序列化/CI/CD流水线篡改|A8| |A09|安全日志和监控失败|日志不记/告警不响|A10| |A10|服务端请求伪造SSRF|服务器帮攻击者发请求|新增(2017为A10)| --- ## 二、逐条导读 + Vulhub实验对照 ### A01 失效的访问控制(Insecure Access Control) **核心**:服务器没有真正校验"你是谁、你能访问什么" - 典型场景:水平越权(改user_id看别人订单)、垂直越权(普通用户调管理员接口)、未授权访问后台、JWT未校验签名 - **Vulhub实验**: - `broken-access-control/`(官方靶场) - 各类未授权访问:SpringBoot Actuator未授权 `spring/springboot-spel` - **代码审计点**:所有带ID参数的接口、所有admin路由 - **防御**:服务端强制鉴权 + 资源归属校验 + 白名单拒绝默认 --- ### A02 加密机制失效(Cryptographic Failures) **核心**:敏感数据没加密,或加密方式弱 - 典型场景:HTTP明文传密码、MD5存密码、硬编码密钥、TLS1.0、敏感数据未加密存储 - **Vulhub实验**:无专门靶场,配合抓包看明文传输;MD5彩虹表破解 - **代码审计点**:搜索MD5/SHA1/ECB/硬编码密钥 - **防御**:全站HTTPS、密码用bcrypt/Argon2id、TLS1.2+、密钥用KMS管理 --- ### A03 注入(Injection) **核心**:用户输入被解释成代码/命令 - 子类:SQL注入、命令注入、XSS、LDAP注入、NoSQL注入、ORM注入 - **Vulhub实验**: - SQLi:`sqli/`(环境多,经典 Less-1~Less-17) - 命令注入:`command-injection/` - XSS:`xss/` - NoSQL注入:`nodejs/nosql-injection` - **代码审计点**:`Statement.execute`、`eval`、`system`、`exec`、MyBatis `${}` - **防御**:参数化预编译、白名单校验、输出编码 --- ### A04 不安全设计(Insecure Design) **核心**:架构设计层面就有问题,后期补不回来 - 典型场景:支付金额前端传、密码重置链接可遍历、验证码无次数限制、业务逻辑竞态条件 - **Vulhub实验**:无现成靶场,需自建或参考OWASP Juice Shop(电商逻辑漏洞靶场) - **学习重点**:威胁建模(Threat Modeling)、STRIDE模型 - **防御**:设计阶段做威胁建模、业务规则服务端校验 --- ### A05 安全配置错误(Security Misconfiguration) **核心**:默认配置、过度暴露、调试模式 - 典型场景:Tomcat后台弱口令、目录列出、`.git`泄露、调试模式开、默认账号admin/admin - **Vulhub实验**: - `tomcat/tomcat-manager`(后台部署war) - `spring/springboot-env`(env接口泄露配置) - 目录列出:`nginx/nginx-index` - **代码审计点**:检查生产配置、默认文件、示例代码 - **防御**:基线加固、删除默认样例、关闭调试、最小权限 --- ### A06 易受攻击和过时的组件(Vulnerable & Outdated Components) **核心**:你用的第三方库有已知漏洞 - 典型场景:Log4j2、Fastjson、Shiro、Struts2、Spring4Shell、Log4shell - **Vulhub实验(重灾区,Vulhub就是为这些而生)**: - `log4j/CVE-2021-44228` - `fastjson/` 全系列 - `shiro/` 550/721 - `struts2/` S2-045/S2-061 - `spring/spring4shell` - `weblogic/` 反序列化 - **代码审计点**:SCA扫描(依赖包版本) - **防御**:定期升级、依赖锁定、移除无用组件 --- ### A07 身份识别和认证失败(Identification & Authentication Failures) **核心**:登录、会话、密码体系不靠谱 - 典型场景:弱口令爆破、会话固定、Cookie无HttpOnly、JWT密钥弱、凭证存储不当、无MFA - **Vulhub实验**: - 暴力破解:`http/basic-auth-brute` - JWT:`jwt/` 相关靶场 - **代码审计点**:Session创建销毁、Cookie属性、密码哈希 - **防御**:MFA、强密码策略、登录失败锁定、安全Cookie属性 --- ### A08 软件和数据完整性故障(Software & Data Integrity Failures) **核心**:数据/代码在传输、更新时没验证完整性 - 典型场景:不安全反序列化(Java/PHP)、CI/CD流水线被投毒、CDN被劫持、自动更新未签名 - **Vulhub实验**: - 反序列化:`fastjson/`、`shiro/`、`ysoserial`链 - `php/ unserialize` 相关 - **代码审计点**:`readObject`、`unserialize`、`pickle.loads` - **防御**:类白名单、数字签名、CI流水线加审批 --- ### A09 安全日志和监控失败(Security Logging & Monitoring Failures) **核心**:被打穿了都不知道 - 典型场景:不记录登录、日志明文存、不告警、无集中日志 - **实验对照**:无Web靶场,对应蓝队SOC:Wazuh/ELK/SIEM搭建 - **学习重点**:日志留存6个月、告警规则、SOAR - **防御**:集中日志、关键行为审计、告警闭环 --- ### A10 服务端请求伪造(SSRF) **核心**:服务器被诱导帮攻击者发请求 - 典型场景:图片URL参数、Webhook、远程文件拉取、云元数据169.254.169.254 - **Vulhub实验**: - `ssrf/` 基础环境 - 配合Redis:`ssrf/redis-gopher`(gopher打Redis) - **代码审计点**:`curl_exec`、`file_get_contents`、`HttpClient` - **防御**:URL白名单、禁内网IP、禁file/gopher协议 --- ## 三、学习路线(建议顺序) 1. **先Web基础**:A03注入(SQL/XSS/命令)→ A01越权 → A05配置错误 2. **再组件漏洞**:A06(Vulhub重头戏:Log4j/Fastjson/Shiro/Struts2) 3. **再高级**:A08反序列化 → A10 SSRF → A02加密 → A04业务逻辑 4. **最后蓝队视角**:A07认证 + A09日志监控 ## 四、配套靶场推荐(除Vulhub外) |靶场|用途| |---|---| |OWASP Juice Shop|现代Web全漏洞练习(含A04业务逻辑)| |DVWA|经典PHP漏洞靶场| |PortSwigger Web Security Academy|官方免费在线实验(XSS/SSRF/CSRF最权威)| |Vulhub|组件/CVE漏洞复现| |HackTheBox / TryHackMe|综合渗透实战| ## 五、一句话学习心法 > OWASP Top10不是10个孤立漏洞,是**10类失败模式**;每个类别的根源都是"信任了不该信任的输入/默认配置"。