Upload-Labs 关卡防御方式

Pass-01 --- 前端 JS 验证

  • 漏洞: 仅在前端通过 JS 检查文件扩展名,服务端无验证

  • 绕过: 禁用浏览器 JS / 修改前端代码 / 直接抓包改包

  • 防御: 服务端必须独立做文件类型校验,不可信任前端验证


Pass-02 --- MIME 类型验证(Content-Type)

  • 漏洞: 仅检查 $_FILES['file']['type'](由客户端控制)

  • 绕过: 抓包修改 Content-Type: image/jpeg

  • 防御: 使用 finfo_file()exif_imagetype() 检测文件真实内容


Pass-03 --- 黑名单扩展名过滤

  • 漏洞: 黑名单禁止 asp|aspx|php|jsp

  • 绕过: 使用可执行替代后缀:.php5 / .phtml / .pht / .shtml / .inc

  • 防御: 使用白名单 机制,只允许 jpg|png|gif;配置 Web 服务器禁止非白名单后缀执行


Pass-04 --- .htaccess 绕过

  • 漏洞: 黑名单禁止常见脚本后缀,但允许上传 .htaccess

  • 绕过: 上传 .htaccess 内容 AddType application/x-httpd-php .jpg,再传图片马

  • 防御: 禁止上传 .htaccess / .user.ini / *.conf 等配置文件


Pass-05 --- .user.ini 绕过

  • 漏洞: 黑名单禁止 .htaccess,但允许 .user.ini

  • 绕过: 上传 .user.ini 内容 auto_prepend_file=shell.jpg,再传图片马

  • 防御: 禁止上传 .user.ini,关闭 CGI/FastCGI 下的 auto_prepend_file 指令


Pass-06 --- 大小写绕过

  • 漏洞: 黑名单为小写 php,未做大小写归一化

  • 绕过: 上传 shell.pHp / shell.Php / shell.pHP

  • 防御: 使用 strtolower()str_ireplace() 统一转为小写后比对


Pass-07 --- 空格绕过

  • 漏洞: 黑名单匹配精确后缀,Windows 自动去除尾部空格

  • 绕过: 上传 shell.php (php 后加空格)

  • 防御: 使用 trim() 去除首尾空格后再校验


Pass-08 --- 点号绕过

  • 漏洞: 黑名单匹配精确后缀,Windows 自动去除尾部 .

  • 绕过: 上传 shell.php.(末尾加点)

  • 防御: 使用 rtrim($filename, '.') 去除尾部点号


Pass-09 --- ::$DATA 流绕过

  • 漏洞: Windows NTFS 文件流特性,::$DATA 之后的内容被忽略

  • 绕过: 上传 shell.php::$DATA

  • 防御: 过滤 ::$DATA: 等特殊 NTFS 流标记;在 Linux 服务器运行


Pass-10 --- 双写绕过

  • 漏洞: str_replace('php', '', $filename) 仅替换一次

  • 绕过: 上传 shell.pphphp(替换后恢复为 .php

  • 防御: 递归替换(循环执行替换直到无变化),或改用 str_ireplace + 递归


Pass-11 --- GET 方式 %00 截断

  • 漏洞: PHP < 5.3.4,URL 中 %00 截断字符串

  • 绕过: 白名单后缀 .jpg,构造路径 shell.php%00.jpg

  • 防御: 升级 PHP 到 >= 5.3.4;对路径做 basename() 过滤


Pass-12 --- POST 方式 %00 截断

  • 漏洞: POST 参数同样存在 %00 截断(需 hex 00)

  • 绕过: 抓包将路径修改为 shell.php[hex:00].jpg

  • 防御: 升级 PHP;路径拼接前做严格校验


Pass-13 --- 图片马 + 文件包含

  • 漏洞: 允许上传图片,但存在文件包含漏洞可解析图片马

  • 绕过: 图片尾部追加 PHP 代码,配合文件包含执行

  • 防御: 分离图片内容与 PHP 代码(二次渲染);严格校验文件内容;修补文件包含漏洞


Pass-14 --- 图片马 + getimagesize()

  • 漏洞: 通过 getimagesize() 检测图片,但未检测代码注入

  • 绕过: 制作图片马并保证 getimagesize() 返回有效图片信息

  • 防御: 对上传的图片做二次渲染,丢弃文件中所有非图片数据


Pass-15 --- 图片马 + exif_imagetype()

  • 漏洞: 通过 exif_imagetype() 检测图片,同上有漏洞

  • 绕过: 同 Pass-14,制作图片马

  • 防御: 二次渲染;使用纯净图片重新生成,不信任用户上传的原始数据


Pass-16 --- 图片马 + 二次渲染

  • 漏洞: 对图片进行二次渲染,但渲染后仍可能保留部分 payload

  • 绕过: 分析二次渲染前后差异数据,将马插入保留像素中

  • 防御: 使用更彻底的图片净化策略(如 imagemagick 策略);对上传文件做内容策略检测(禁止包含 <?php 等)


Pass-17 --- 代码执行(文件名注入)

  • 漏洞: 将文件名拼接到代码中执行,未做严格过滤

  • 绕过: 上传文件名包含可执行代码 shell.php;xxx.jpg

  • 防御: 重命名文件为随机字符串加白名单后缀;对文件名做严格过滤


Pass-18 --- 竞争条件

  • 漏洞: 文件先保存到服务器,检查不合法后再删除,存在时间差

  • 绕过: 持续访问该文件,在检查删除之前执行

  • 防御: 先检查文件合法性再保存,使用临时目录 + 原子操作


Pass-19 --- 白名单 + 解析漏洞

  • 漏洞: 只允许特定后缀,但拼接路径时去除最后 . 之后的内容

  • 绕过: shell.php.jpg 利用 Apache 解析漏洞(不认识 .jpg 向前识别 .php

  • 防御: 配置 Apache/Nginx 禁止多后缀解析;重命名文件为 时间戳+随机数.jpg


Pass-20 --- 数组绕过

  • 漏洞: $_FILES 多维数组绕过 isset() 检查

  • 绕过: 构造 file[name]="shell.php" 数组格式上传

  • 防御: 使用 is_array() 检测参数类型;采用 pathinfo() 取真实扩展名


Pass-21 --- 文件头检测

  • 漏洞: 检查文件头部字节(魔数)判断类型,但未检测后续代码

  • 绕过: 在合法文件头后追加 PHP 代码(图片马)

  • 防御: 配合二次渲染 + 内容扫描;使用白名单后缀防止执行

相关推荐
JonLee20203 小时前
适配 Yii 3.0,php-casbin/yii-permission 3.0 正式发布
安全·php·rbac·yii·权限·casbin
QH139292318805 小时前
# R&S ZNB43 ZNA43 ZNA67矢量网络分析仪
开发语言·网络·php
名字还没想好☜7 小时前
Python concurrent.futures 实战:用 ThreadPoolExecutor 并发处理 + as_completed 收结果
数据库·python·php·并发
风样滴男人哟8 小时前
PHP特性之反射类ReflectionClass机制
android·开发语言·php
nvd118 小时前
GCP L4 Passthrough 负载均衡器“假死超时”深度排查复盘
运维·php·负载均衡
2601_9657984710 小时前
ForumLab Review: Fast PHP Script for SEO Forum Sites
android·adb·php
姜太小白1 天前
【Linux】df -h 卡住问题的通用排查与解决方案总结
linux·运维·php
狗凯之家源码网1 天前
短剧系统搭建实战:源码功能与商业变现效果全景展示
开发语言·php
连续讨伐1 天前
php小结
开发语言·php