Vulnerability-wiki

OWASP Top 10 漏洞介绍

OWASP Top 10 是由开放式 Web 应用安全项目(OWASP)发布的全球最权威的 Web 应用安全风险榜单。它总结了最常见、最严重的十大安全漏洞类型,旨在帮助开发者、测试人员和安全从业者识别和防范 Web 应用中的核心安全问题。

OWASP Top 10 涵盖了从技术实现到业务逻辑的多种安全风险,是开源社区和企业安全治理的基础参考。


工作原理

OWASP Top 10 涉及的漏洞类型,既包括代码实现层面的缺陷,也包括业务流程和权限控制等设计层面的失误。攻击者通过篡改参数、绕过验证、利用并发或滥用资源等方式,突破应用的安全防线,造成数据泄露、资金损失、系统被控等严重后果。

核心原则:


漏洞类型与示例

漏洞类型 描述 典型攻击场景
A01: Broken Access Control 权限控制不严,导致越权访问或操作。 修改请求参数访问他人数据。
A02: Cryptographic Failures 加密实现不当,敏感数据泄露。 明文传输密码或敏感信息。
A03: Injection SQL/NoSQL/命令注入,攻击者可执行恶意代码。 输入特殊字符绕过验证,执行 SQL 语句。
A04: Insecure Design 业务流程设计不严谨,易被绕过。 跳过支付流程直接访问成功页面。
A05: Security Misconfiguration 配置错误导致安全缺陷。 默认密码、调试接口未关闭。
A06: Vulnerable and Outdated Components 使用有漏洞的第三方库或组件。 依赖未及时更新,存在已知漏洞。
A07: Identification and Authentication Failures 身份认证机制不安全。 弱密码、验证码可被暴力破解。
A08: Software and Data Integrity Failures 代码或数据完整性校验不足。 未校验更新包来源,遭供应链攻击。
A09: Security Logging and Monitoring Failures 缺乏安全日志和监控,攻击难以发现。 无法及时检测和响应安全事件。
A10: Server-Side Request Forgery (SSRF) 服务器被诱导请求恶意地址。 利用接口让服务器访问内网资源。

攻击示例

1. 权限控制缺陷(越权访问)

// 未校验当前用户是否有权访问目标订单
$order_id = $_GET['order_id'];
show_order($order_id);

攻击过程:

  1. 正常用户只能访问自己的订单,如 order_id=1001
  2. 攻击者登录后,修改请求参数为他人的订单号,如 order_id=1002
  3. 后端未校验订单归属,攻击者可查看或操作他人订单,造成隐私泄露或资金损失。

2. SQL 注入

$username = $_GET['username'];
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $sql);

攻击过程:

  1. 攻击者在 username 参数中输入恶意内容:admin' OR '1'='1
  2. 拼接后的 SQL 语句变为:SELECT * FROM users WHERE username = 'admin' OR '1'='1'
  3. 条件恒为真,返回所有用户信息,攻击者可获取敏感数据或登录任意账户。

3. 业务流程绕过

// 正常流程:下单 -> 支付 -> 支付成功页面
if ($order->isPaid()) {
    showSuccessPage();
}

攻击过程:

  1. 用户下单后,正常应完成支付流程。
  2. 攻击者直接访问支付成功页面的 URL(如 /order/success?order_id=1234)。
  3. 后端仅判断订单状态,未校验支付流程是否完整,攻击者可跳过支付,获得商品或服务。

4. 配置错误(Security Misconfiguration)

# web服务器配置文件示例
debug: true
admin_password: admin123

攻击过程:

  1. 生产环境开启了调试模式,暴露敏感信息。
  2. 默认密码未修改,攻击者可直接登录后台,获取系统控制权。

5. 组件漏洞(Vulnerable and Outdated Components)

// package.json
"dependencies": {
  "express": "4.16.0" // 存在已知漏洞
}

攻击过程:

  1. 项目依赖的组件存在高危漏洞(如远程代码执行)。
  2. 攻击者利用公开漏洞信息,发送特定请求,控制服务器或窃取数据。

6. 身份认证失败(Identification and Authentication Failures)

// 密码校验逻辑
if ($_POST['password'] == '123456') {
    login();
}

攻击过程:

  1. 使用弱密码或通用密码,易被暴力破解。
  2. 攻击者利用自动化工具尝试常见密码,成功登录他人账户。

7. 数据完整性校验失败(Software and Data Integrity Failures)

// 前端下载更新包,未校验签名
fetch('https://update.example.com/app.zip')
  .then(downloadAndInstall);

攻击过程:

  1. 攻击者劫持更新源,提供恶意更新包。
  2. 客户端未校验包完整性,自动安装后系统被植入后门。

8. 日志与监控缺失(Security Logging and Monitoring Failures)

// 关键操作未记录日志
function transfer($from, $to, $amount) {
    // ...资金转账逻辑...
}

攻击过程:

  1. 攻击者多次尝试越权、注入等攻击,系统无日志记录。
  2. 管理员无法及时发现异常行为,攻击长期未被察觉。

9. SSRF(Server-Side Request Forgery)

$url = $_GET['url'];
$content = file_get_contents($url);
echo $content;

攻击过程:

  1. 攻击者传入内网地址,如 http://127.0.0.1/admin
  2. 服务器帮攻击者访问内网敏感接口,返回数据或执行操作,造成信息泄露或进一步攻击。

漏洞检测方法

一、手工检测

  1. 理解业务流程:梳理核心功能,画出流程图。
  2. 篡改关键参数:使用 Burp Suite 等工具修改请求参数,测试权限、流程、数值边界。
  3. 并发测试:对资源操作类功能进行并发请求,检测竞争条件。
  4. 流程逆向/绕过:尝试跳过或重排业务流程步骤。

二、辅助检测工具

工具 特点 适用场景
Burp Suite 手工修改、重放、并发测试 参数篡改、流程绕过
Turbo Intruder 高速并发攻击 竞争条件测试
ffuf/wfuzz 批量模糊测试 参数/目录发现
sqlmap 自动化 SQL 注入检测 数据库安全测试
自定义脚本 针对复杂业务逻辑定制化测试 业务流程相关

防御与加固建议

方法 说明
服务端强制校验 所有关键数据以服务端为准,绝不信任客户端输入。
权限与流程控制 严格校验用户权限和业务流程状态。
操作原子性 资金、库存等关键操作需保证原子性。
安全配置与更新 及时修复组件漏洞,关闭调试接口。
日志与监控 完善安全日志,及时发现异常行为。
风控措施 频率限制、人机校验等防止资源滥用。

靶场与实战环境

靶场环境 特点
PortSwigger Web Security Academy 涵盖 OWASP Top 10 各类漏洞的在线实验环境。
OWASP WebGoat 经典靶场,包含多种漏洞场景。
DVWA 基础漏洞练习平台。

参考资料


📝 作者:Luhaozhhhe
📧 邮箱:15058298819@163.com
🏫 单位:Nankai University
📅 最后更新时间:2025-07-26