DVWA 靶场 10 大漏洞实战:从 Low 到 High 的 3 种安全级别攻防解析

📅 2026/7/8 1:29:05 👁️ 阅读次数 📝 编程学习
DVWA 靶场 10 大漏洞实战:从 Low 到 High 的 3 种安全级别攻防解析

DVWA 靶场 10 大漏洞实战:从 Low 到 High 的 3 种安全级别攻防解析

在网络安全领域,实战演练是提升技能的关键环节。DVWA(Damn Vulnerable Web Application)作为一个专为安全测试设计的脆弱 Web 应用,集成了 10 种常见 Web 漏洞的靶场环境,并提供了 Low、Medium、High 三种安全级别配置。本文将深入剖析这些漏洞在不同安全级别下的防御机制差异,并提供可落地的攻击手法与防御方案对比。

1. DVWA 靶场与安全级别概述

DVWA 采用 PHP/MySQL 架构,模拟了真实 Web 应用中的典型漏洞场景。其核心价值在于:

  • 渐进式安全防护:每个漏洞模块提供从低到高的安全级别配置
  • 源码可审计性:可直接查看不同防护级别的实现代码差异
  • 标准化测试环境:消除环境差异对学习效果的影响

安全级别的演进逻辑如下表所示:

安全级别防护特征典型措施
Low无防护或基础过滤简单字符串替换
Medium不完全防护正则表达式过滤
High严格防护预编译语句、CSRF Token

2. SQL 注入攻防演进分析

2.1 Low 级别:原始语句拼接

// Low 级别代码片段 $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

攻击手法

1' UNION SELECT user, password FROM users#

关键缺陷

  • 直接拼接用户输入到 SQL 语句
  • 无任何过滤或转义机制

2.2 Medium 级别:类型强制转换

// Medium 级别改进 $id = (int)$_GET['id']; $query = "SELECT first_name, last_name FROM users WHERE user_id = $id";

绕过方法

  • 利用数字型注入特性:
1 UNION SELECT user, password FROM users#

2.3 High 级别:预编译语句

// High 级别防护 $data = $db->prepare('SELECT first_name, last_name FROM users WHERE user_id = (:id)'); $data->bindParam(':id', $id, PDO::PARAM_INT);

防护优势

  • 参数化查询彻底分离代码与数据
  • 类型绑定防止类型混淆攻击

3. XSS 漏洞防御对比

3.1 反射型 XSS 防护演进

Low 级别(无过滤)

echo '<pre>Hello ' . $_GET['name'] . '</pre>';

Medium 级别(部分过滤)

$name = str_replace('<script>', '', $_GET['name']);

High 级别(HTML实体编码)

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);

3.2 存储型 XSS 防护方案

防护级别输入处理输出处理
Low
Medium剥离script标签
High内容安全策略(CSP)双重编码

4. 文件上传漏洞的防御梯度

4.1 Low 级别漏洞

// 无任何校验 move_uploaded_file($_FILES['file']['tmp_name'], $target_path);

攻击方式

  • 直接上传.php后缀的webshell

4.2 Medium 级别防护

// 检查Content-Type if ($_FILES['file']['type'] != 'image/jpeg') { $html .= 'Invalid file type'; }

绕过方法

  • 修改HTTP头部的Content-Type字段

4.3 High 级别防护

// 多重校验机制 $file_info = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_file($file_info, $_FILES['file']['tmp_name']); if (!in_array($mime_type, ['image/jpeg','image/png'])) { // 拒绝上传 }

5. CSRF 防护机制对比

5.1 Low 级别风险

<!-- 无防护的表单 --> <form action="/change_password.php" method="POST"> <input type="password" name="new_pwd"> </form>

5.2 Medium 级别改进

// 检查Referer头 if(strpos($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST'])===false) { die("Invalid request"); }

5.3 High 级别方案

// 使用CSRF Token if (!checkToken($_POST['token'], $_SESSION['token'])) { die("Token validation failed"); }

6. 命令注入防御实践

6.1 Low 级别注入点

system("ping -c 4 " . $_GET['ip']);

攻击载荷

127.0.0.1; cat /etc/passwd

6.2 Medium 级别过滤

$substitutions = array( '&&' => '', ';' => '', ); $target = str_replace(array_keys($substitutions), $substitutions, $target);

6.3 High 级别防护

// 白名单校验 if (!preg_match('/^[0-9.]+$/', $_GET['ip'])) { die("Invalid IP address"); }

7. 不安全的验证码漏洞

7.1 Low 级别缺陷

// 前端验证 function checkCaptcha() { return true; }

7.2 Medium 级别问题

// 可重放的Session验证 if ($_POST['captcha'] != $_SESSION['captcha']) { die("Wrong captcha"); }

7.3 High 级别方案

// 一次性验证码 unset($_SESSION['captcha']); if (!verifyReCaptcha($_POST['g-recaptcha-response'])) { die("Captcha verification failed"); }

8. 文件包含漏洞防护

8.1 Low 级别风险

include($_GET['page'] . '.php');

攻击示例

page=../../../../etc/passwd%00

8.2 Medium 级别过滤

$page = str_replace('../', '', $_GET['page']);

8.3 High 级别防护

$allowed = ['home','about','contact']; if (!in_array($_GET['page'], $allowed)) { die('Invalid page request'); }

9. 暴力破解防护演进

9.1 Low 级别风险

// 无防护的登录逻辑 if ($_POST['password'] == $db_password) { login_success(); }

9.2 Medium 级别防护

// 简单的登录延迟 sleep(2);

9.3 High 级别方案

// 账户锁定机制 if ($failed_attempts > 5) { lock_account($username); }

10. 安全加固最佳实践

根据对不同安全级别的分析,总结出以下防护策略:

  1. 输入验证

    • 白名单优于黑名单
    • 类型检查优先于字符串过滤
  2. 输出编码

    // 根据上下文选择编码方式 htmlspecialchars($output, ENT_QUOTES);
  3. 安全配置

    # 禁用危险函数 disable_functions = exec,system,passthru
  4. 防御深度

    • 前端验证+后端校验
    • 业务逻辑+基础架构防护

在实际渗透测试中,建议按照安全级别梯度进行测试,先分析Low级别的漏洞原理,再逐步挑战更高级别的防护机制。DVWA的Impossible级别展示了接近生产环境的安全方案,值得开发者参考借鉴。