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 代码(图片马)

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

相关推荐
肠畔码农4 小时前
Redis 主从复制内核深潜:从物理模型到全量增量同步的本质
网络·redis·php
三8445 小时前
PHP 污点分析绕过实战:CURL、get_meta_tags 与 fpm_get_status 引入非预定义污点源
开发语言·php
辻弋2016 小时前
一键优化电源计划、游戏模式、独显强制、禁用后台录制——DeltaForceBooster专治三角洲行动卡顿掉帧,所有改动可一键还原
服务器·数据库·windows·游戏·电脑·php
Sagittarius_A*7 小时前
【好靶场】PHP反序列化入门练习
安全·php·web·反序列化
2601_965798477 小时前
How to Build a Scalable Classified Directory with Classima Theme
php·theme
何以解忧,唯有..8 小时前
Python logging 模块:从入门到精通
python·microsoft·php
quantdash_cc8 小时前
历史数据断层与REST请求慢到崩溃?QuantDash高性能量化数据API终极解决方案
开发语言·python·缓存·php·量化·quantdash
sbjdhjd8 小时前
CTF 技术复盘:从参数类型绕过到正则回溯 | Merry Christmas PHP CTF(gift.php & gift_plus.php)
安全·网络安全·云计算·php·ctf·红队·网络攻防
Sagittarius_A*9 小时前
【好靶场】PHP反序列化入门练习2
开发语言·web安全·信息安全·php·代码审计·反序列化
PHP实战开发录9 小时前
微信小程序多环境配置混用排查记录
微信小程序·php·开发·接口隔离原则