upload-labs 靶场全解(全)
字数 1943 2025-08-10 08:28:15

Upload-Labs 靶场全解教学文档

前提条件

  1. 文件能够成功上传到服务器
  2. 攻击者能够知道文件的上传路径

Pass-01 (前端验证)

绕过方法

  1. 禁用客户端JavaScript弹窗
  2. 通过Burp抓包修改后缀名
  3. F12删除return filecheck()代码

步骤

  • 上传.php文件会出现弹窗
  • 修改前端代码:关闭JavaScript弹窗或删除检查函数
  • 上传成功后检查服务器目录
  • 使用蚁剑连接获取文件路径

Pass-02 (MIME验证)

绕过方法

  1. 上传php文件,修改Content-Type为合法类型
  2. 上传合法后缀文件,通过Burp修改文件后缀

步骤

  • 法一:修改Content-Type为image/jpeg等合法类型
  • 法二:上传时修改文件后缀为合法类型,Burp拦截后改回.php

Pass-03 (黑名单验证,特殊后缀名)

绕过方法

  • 尝试使用php环境支持的其他后缀:php1, php2, php3, php4, php5, phtml, pht
  • 需要修改Apache的httpd.conf配置,添加这些后缀的解析

源码黑名单

$deny_ext = array('.asp','.aspx','.php','.jsp');

Pass-04 (.htaccess绕过)

绕过方法

  • 上传.htaccess文件重写解析规则
  • 文件内容示例:
<FilesMatch "xxx.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

AddType application/x-httpd-php .jpg

Pass-05 (.user.ini绕过)

绕过方法

  • 上传.user.ini文件,内容为:
auto_prepend_file=666.jpg
  • 所有php文件都会自动包含666.jpg文件

Pass-06 (大小写绕过)

绕过方法

  • 将.php改为.Php等大小写混合形式
  • 服务器未使用strtolower()函数统一转为小写

Pass-07 (空格绕过)

绕过方法

  • 在文件名后添加空格,如shell.php
  • 服务器未使用trim()去除空格

Pass-08 (点号绕过)

绕过方法

  • 在文件名后添加点,如shell.php.
  • 服务器未使用deldot()过滤末尾的点

Pass-09 (::$DATA绕过)

绕过方法

  • 使用Windows特性,在文件名后添加::$DATA
  • shell.php::$DATA

Pass-10 (点+空格+点绕过)

绕过方法

  • 使用shell.php. .格式
  • deldot()函数遇到空格会停止检测

Pass-11 (双写绕过)

绕过方法

  • 使用双写后缀,如shell.pphphp
  • 服务器使用str_ireplace()替换黑名单后缀为空

Pass-12 (00截断GET型)

绕过方法

  • Apache版本需调至5.2.17,magic_quotes_gpc=off
  • 使用shell.php%00.jpg格式
  • GET方式传参,%00会被解码为0x00截断

Pass-13 (00截断POST型)

绕过方法

  • 使用十六进制00截断,在Hex视图中修改
  • POST不会自动解码%00,需手动修改

Pass-14 (图片马)

制作方法

  1. 在图片头部添加格式标识(GIF89a/PNG等)
  2. 末尾添加一句话木马
  3. 通过文件包含漏洞执行

Pass-15 (getimagesize验证)

绕过方法

  • 使用正确的图片文件头
  • 在图片中嵌入恶意代码
  • 通过文件包含执行

Pass-16 (exif_imagetype验证)

绕过方法

  • 需开启php.exif扩展
  • 同Pass-15方法,确保文件头正确

Pass-17 (二次渲染绕过)

绕过方法

  1. 上传正常图片获取渲染前后不变的位置
  2. 使用010Editor等工具在不变位置插入恶意代码
  3. 通过文件包含执行

Pass-18 (条件竞争)

绕过方法

  1. 快速多次上传恶意文件
  2. 在服务器删除前访问文件
  3. 使用Burp Intruder高频率发送请求

Pass-19 (路径问题+条件竞争)

绕过方法

  • 修改上传路径问题
  • 同Pass-18方法,快速上传访问

Pass-20 (move_uploaded_file特性)

绕过方法

  • 利用move_uploaded_file忽略末尾/的特性
  • 使用shell.php/.格式

Pass-21 (复杂绕过)

备注

  • 需要更深入的分析和钻研
  • 结合前面多种绕过方法尝试

通用技巧

  1. 图片马制作
copy php.php/b + image.png output.png
  1. 蚁剑连接
  • 确保文件路径正确
  • 测试连接时清理中间混杂内容
  1. 环境配置
  • 调整Apache版本和php.ini设置
  • 确保相关扩展已开启
  1. 工具使用
  • Burp Suite抓包修改
  • 010Editor分析文件结构
  • 蚁剑进行连接测试

以上为upload-labs靶场全部关卡的详细解法,涵盖了前端验证、MIME类型、黑名单/白名单、各种特殊字符绕过、条件竞争等多种文件上传漏洞利用技术。

Upload-Labs 靶场全解教学文档 前提条件 文件能够成功上传到服务器 攻击者能够知道文件的上传路径 Pass-01 (前端验证) 绕过方法 : 禁用客户端JavaScript弹窗 通过Burp抓包修改后缀名 F12删除 return filecheck() 代码 步骤 : 上传.php文件会出现弹窗 修改前端代码:关闭JavaScript弹窗或删除检查函数 上传成功后检查服务器目录 使用蚁剑连接获取文件路径 Pass-02 (MIME验证) 绕过方法 : 上传php文件,修改Content-Type为合法类型 上传合法后缀文件,通过Burp修改文件后缀 步骤 : 法一:修改Content-Type为 image/jpeg 等合法类型 法二:上传时修改文件后缀为合法类型,Burp拦截后改回.php Pass-03 (黑名单验证,特殊后缀名) 绕过方法 : 尝试使用php环境支持的其他后缀:php1, php2, php3, php4, php5, phtml, pht 需要修改Apache的httpd.conf配置,添加这些后缀的解析 源码黑名单 : Pass-04 (.htaccess绕过) 绕过方法 : 上传.htaccess文件重写解析规则 文件内容示例: 或 Pass-05 (.user.ini绕过) 绕过方法 : 上传.user.ini文件,内容为: 所有php文件都会自动包含666.jpg文件 Pass-06 (大小写绕过) 绕过方法 : 将.php改为.Php等大小写混合形式 服务器未使用strtolower()函数统一转为小写 Pass-07 (空格绕过) 绕过方法 : 在文件名后添加空格,如 shell.php 服务器未使用trim()去除空格 Pass-08 (点号绕过) 绕过方法 : 在文件名后添加点,如 shell.php. 服务器未使用deldot()过滤末尾的点 Pass-09 (::$DATA绕过) 绕过方法 : 使用Windows特性,在文件名后添加 ::$DATA 如 shell.php::$DATA Pass-10 (点+空格+点绕过) 绕过方法 : 使用 shell.php. . 格式 deldot()函数遇到空格会停止检测 Pass-11 (双写绕过) 绕过方法 : 使用双写后缀,如 shell.pphphp 服务器使用str_ ireplace()替换黑名单后缀为空 Pass-12 (00截断GET型) 绕过方法 : Apache版本需调至5.2.17,magic_ quotes_ gpc=off 使用 shell.php%00.jpg 格式 GET方式传参,%00会被解码为0x00截断 Pass-13 (00截断POST型) 绕过方法 : 使用十六进制00截断,在Hex视图中修改 POST不会自动解码%00,需手动修改 Pass-14 (图片马) 制作方法 : 在图片头部添加格式标识(GIF89a/PNG等) 末尾添加一句话木马 通过文件包含漏洞执行 Pass-15 (getimagesize验证) 绕过方法 : 使用正确的图片文件头 在图片中嵌入恶意代码 通过文件包含执行 Pass-16 (exif_ imagetype验证) 绕过方法 : 需开启php.exif扩展 同Pass-15方法,确保文件头正确 Pass-17 (二次渲染绕过) 绕过方法 : 上传正常图片获取渲染前后不变的位置 使用010Editor等工具在不变位置插入恶意代码 通过文件包含执行 Pass-18 (条件竞争) 绕过方法 : 快速多次上传恶意文件 在服务器删除前访问文件 使用Burp Intruder高频率发送请求 Pass-19 (路径问题+条件竞争) 绕过方法 : 修改上传路径问题 同Pass-18方法,快速上传访问 Pass-20 (move_ uploaded_ file特性) 绕过方法 : 利用move_ uploaded_ file忽略末尾/的特性 使用 shell.php/. 格式 Pass-21 (复杂绕过) 备注 : 需要更深入的分析和钻研 结合前面多种绕过方法尝试 通用技巧 图片马制作 : 蚁剑连接 : 确保文件路径正确 测试连接时清理中间混杂内容 环境配置 : 调整Apache版本和php.ini设置 确保相关扩展已开启 工具使用 : Burp Suite抓包修改 010Editor分析文件结构 蚁剑进行连接测试 以上为upload-labs靶场全部关卡的详细解法,涵盖了前端验证、MIME类型、黑名单/白名单、各种特殊字符绕过、条件竞争等多种文件上传漏洞利用技术。