Upload-labs通关手册
字数 1987 2025-08-29 08:32:24
Upload-labs 通关手册 - 全面文件上传漏洞实战指南
一、环境准备
运行环境要求:
- 操作系统:Windows 或 Linux
- PHP版本:推荐 5.2.17(其他版本可能导致部分关卡无法突破)
- PHP组件:php_gd2、php_exif(部分关卡需要)
- Apache:以 module 方式连接
项目地址:
https://github.com/c0ny1/upload-labs
二、基础文件上传漏洞类型及绕过方法
1. 前端验证绕过(第一关)
- 漏洞特征:仅前端JavaScript验证文件类型
- 绕过方法:
- 禁用浏览器JavaScript
- 修改前端验证函数,允许上传php文件
- 使用Burp Suite拦截并修改上传请求
2. Content-Type验证绕过(第二关)
- 漏洞特征:服务器仅检查Content-Type
- 绕过方法:
修改HTTP请求头中的Content-Type为合法类型(如image/jpeg)
3. 黑名单验证绕过(第三关)
- 漏洞特征:使用黑名单过滤特定扩展名
- 绕过方法:
使用非常见PHP解析扩展名:.php3.phtml.phps.php5
4. .htaccess文件利用(第四关)
- 漏洞特征:黑名单未过滤.htaccess
- 绕过方法:
- 上传包含以下内容的.htaccess文件:
SetHandler application/x-httpd-php - 上传任意文件(如图片马)将被解析为PHP
- 上传包含以下内容的.htaccess文件:
5. 大小写绕过(第五关)
- 漏洞特征:未统一处理扩展名大小写
- 绕过方法:
使用大小写混合扩展名:.Php.pHp.pHP
6. 空格绕过(第六关)
- 漏洞特征:未去除扩展名中的空格
- 绕过方法:
在扩展名后添加空格:info.php
7. 点号绕过(第七关)
- 漏洞特征:未处理扩展名末尾的点号
- 绕过方法:
利用Windows特性(自动去除末尾点号):info.php.
8. Windows特性绕过(第八关)
- 漏洞特征:未过滤
::$DATA - 绕过方法:
利用Windows NTFS流特性:info.php::$DATA
9. 点+空格+点绕过(第九关)
- 漏洞特征:路径拼接处理后的文件名
- 绕过方法:
构造特殊文件名:info.php. .(处理后变为info.php.)
10. 双写绕过(第十关)
- 漏洞特征:将黑名单扩展名替换为空
- 绕过方法:
使用双写扩展名:info.pphphp
三、高级绕过技术
11. %00截断(GET型)(第十一关)
- 漏洞特征:
$img_path直接拼接,未过滤%00 - 绕过方法:
在路径中使用%00截断:info.php%00.jpg
12. %00截断(POST型)(第十二关)
- 漏洞特征:POST参数未自动解码%00
- 绕过方法:
- 使用Burp Suite修改二进制数据
- 在适当位置插入十六进制00
13. 图片马绕过(第十三关)
- 检测方式:读取文件前2个字节
- 绕过方法:
- 制作图片马:
copy normal.jpg /b + shell.php /a webshell.jpg - 需要配合文件包含漏洞利用
- 制作图片马:
14. getimagesize()验证绕过(第十四关)
- 检测方式:使用getimagesize()获取图片信息
- 绕过方法:
直接上传有效的图片马
15. exif_imagetype()验证绕过(第十五关)
- 检测方式:使用php_exif模块验证
- 绕过方法:
上传符合标准的图片马
16. 二次渲染绕过(第十六关)
- 检测方式:综合验证(扩展名、Content-Type、图像渲染)
- 绕过方法:
- 上传GIF图片马
- 对比渲染前后文件,找到不变部分插入代码
17. 条件竞争漏洞(第十七关)
- 漏洞特征:上传→重命名→删除流程
- 利用方法:
- 使用Burp Suite持续发送上传请求
- 同时快速访问上传文件,在删除前执行
18. 重命名条件竞争(第十八关)
- 漏洞特征:上传后重命名存在时间差
- 利用方法:
持续快速上传,使系统来不及重命名
19. move_uploaded_file() %00截断(第十九关)
- 漏洞特征:CVE-2015-2348
- 利用方法:
在POST参数save_name中使用%00截断
四、防御建议
- 使用白名单而非黑名单验证文件扩展名
- 统一处理扩展名大小写
- 去除文件名中的特殊字符(空格、点号、
::$DATA等) - 禁止上传.htaccess等配置文件
- 对上传文件重命名(避免用户控制文件名)
- 将上传文件存储在非Web目录
- 使用随机生成的文件名
- 对图片文件进行二次渲染
- 使用安全的文件处理函数,避免%00截断
五、总结
Upload-labs靶场全面覆盖了从基础到高级的文件上传漏洞类型,通过实践这些关卡,可以深入理解文件上传漏洞的原理、利用方法和防御措施。掌握这些技术对于Web安全测试和防御至关重要。