DVWA靶场之File Upload学习分享
字数 1268 2025-08-24 20:49:31

DVWA靶场之File Upload漏洞分析与利用

1. 文件上传漏洞概述

文件上传漏洞是指Web应用程序允许用户上传文件到服务器,但未对上传文件进行充分验证,导致攻击者可以上传恶意文件(如PHP木马)并执行,从而获取服务器控制权。

2. DVWA文件上传漏洞分析

2.1 Low级别漏洞

代码分析:

<?php
if (isset($_POST['Upload'])) {
    $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename($_FILES['uploaded']['name']);
    
    if (!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
        $html .= '<pre>Your image was not uploaded.</pre>';
    } else {
        $html .= "<pre>{$target_path} succesfully uploaded!</pre>";
    }
}
?>

漏洞点:

  • 仅使用basename()函数获取文件名,无任何文件类型检查
  • 无内容验证,可直接上传任意文件类型
  • 上传路径可预测

利用方法:

  1. 直接上传PHP一句话木马文件(如1.php
  2. 使用蚁剑等工具连接获取shell

2.2 Medium级别漏洞

代码分析:
增加了文件类型和大小限制:

  • 文件类型必须是jpeg或png
  • 文件大小不超过100000B(约97.6KB)

绕过方法:

方法一:修改Content-Type

  1. 上传PHP文件
  2. 拦截请求,修改Content-Type为image/pngimage/jpeg
  3. 放行请求

方法二:修改文件后缀

  1. 将木马文件命名为shell.png
  2. 上传后拦截请求,修改文件名为shell.php
  3. 放行请求

方法三:%00截断(需特定环境)

  1. 将文件名改为shell.php%00.png
  2. 在PHP版本<5.3.4且magic_quotes_gpc=off时可利用
  3. 服务器会解析为shell.php

2.3 High级别漏洞

代码分析:

  • 使用strrpos()检查文件扩展名(必须为.jpg/.jpeg/.png)
  • 使用getimagesize()验证文件内容是否为真实图片

绕过方法:

方法一:添加图片文件头

  1. 创建包含PHP代码的文本文档
  2. 添加图片文件头(如GIF89)
  3. 修改文件后缀为.jpg
  4. 上传并拦截请求,确保Content-Type正确

方法二:图片后附加PHP代码

  1. 使用命令合并图片与PHP代码:
    copy 1.jpg/b + shell.php/a 2.jpg
    
  2. 上传合并后的文件

利用文件包含漏洞执行:
由于服务器将文件解析为图片,需结合文件包含漏洞执行PHP代码:

/vulnerabilities/fi/?page=file:///var/www/html/hackable/uploads/phpinfo.jpg

2.4 Impossible级别防护

防护措施:

  1. 对上传文件重命名(使用md5值)
  2. 添加Anti-CSRF token
  3. 使用imagecreatefromjpeg()等函数严格验证图片内容
  4. 即使上传成功也无法执行恶意代码

3. 防御建议

  1. 文件类型验证

    • 使用白名单限制允许的文件扩展名
    • 检查MIME类型和文件内容
  2. 文件重命名

    • 使用随机名称存储上传文件
    • 避免使用用户提供的文件名
  3. 权限控制

    • 上传目录禁止执行脚本
    • 设置适当的文件权限
  4. 内容验证

    • 对图片文件使用图像处理函数验证
    • 对文档文件进行解析验证
  5. 其他措施

    • 限制文件大小
    • 使用病毒扫描
    • 记录上传行为

4. 总结

DVWA的File Upload模块展示了不同安全级别下的文件上传漏洞及其防护措施。从Low级别的无任何防护,到Impossible级别的多重防护,体现了Web安全防护的逐步加强过程。在实际开发中,应至少采用High级别的防护措施,并结合业务需求增加额外的安全验证。

DVWA靶场之File Upload漏洞分析与利用 1. 文件上传漏洞概述 文件上传漏洞是指Web应用程序允许用户上传文件到服务器,但未对上传文件进行充分验证,导致攻击者可以上传恶意文件(如PHP木马)并执行,从而获取服务器控制权。 2. DVWA文件上传漏洞分析 2.1 Low级别漏洞 代码分析: 漏洞点: 仅使用 basename() 函数获取文件名,无任何文件类型检查 无内容验证,可直接上传任意文件类型 上传路径可预测 利用方法: 直接上传PHP一句话木马文件(如 1.php ) 使用蚁剑等工具连接获取shell 2.2 Medium级别漏洞 代码分析: 增加了文件类型和大小限制: 文件类型必须是jpeg或png 文件大小不超过100000B(约97.6KB) 绕过方法: 方法一:修改Content-Type 上传PHP文件 拦截请求,修改Content-Type为 image/png 或 image/jpeg 放行请求 方法二:修改文件后缀 将木马文件命名为 shell.png 上传后拦截请求,修改文件名为 shell.php 放行请求 方法三:%00截断(需特定环境) 将文件名改为 shell.php%00.png 在PHP版本<5.3.4且magic_ quotes_ gpc=off时可利用 服务器会解析为 shell.php 2.3 High级别漏洞 代码分析: 使用 strrpos() 检查文件扩展名(必须为.jpg/.jpeg/.png) 使用 getimagesize() 验证文件内容是否为真实图片 绕过方法: 方法一:添加图片文件头 创建包含PHP代码的文本文档 添加图片文件头(如GIF89) 修改文件后缀为.jpg 上传并拦截请求,确保Content-Type正确 方法二:图片后附加PHP代码 使用命令合并图片与PHP代码: 上传合并后的文件 利用文件包含漏洞执行: 由于服务器将文件解析为图片,需结合文件包含漏洞执行PHP代码: 2.4 Impossible级别防护 防护措施: 对上传文件重命名(使用md5值) 添加Anti-CSRF token 使用 imagecreatefromjpeg() 等函数严格验证图片内容 即使上传成功也无法执行恶意代码 3. 防御建议 文件类型验证 : 使用白名单限制允许的文件扩展名 检查MIME类型和文件内容 文件重命名 : 使用随机名称存储上传文件 避免使用用户提供的文件名 权限控制 : 上传目录禁止执行脚本 设置适当的文件权限 内容验证 : 对图片文件使用图像处理函数验证 对文档文件进行解析验证 其他措施 : 限制文件大小 使用病毒扫描 记录上传行为 4. 总结 DVWA的File Upload模块展示了不同安全级别下的文件上传漏洞及其防护措施。从Low级别的无任何防护,到Impossible级别的多重防护,体现了Web安全防护的逐步加强过程。在实际开发中,应至少采用High级别的防护措施,并结合业务需求增加额外的安全验证。