PHP文件上传漏洞绕过本质是针对服务端校验薄弱点的突破,包括前端JS校验绕过、后缀名黑名单绕过(大小写、双写、空格等)、MIME与文件头伪造、服务器解析特性利用(.htaccess/.user.ini/NTFS流)。

PHP 文件上传漏洞的绕过方式,本质是攻击者针对服务端校验逻辑中的薄弱环节发起的针对性突破。常见防御点包括前端限制、后缀名检查、MIME 类型判断、文件内容识别等,而每一种都对应着成熟且高频的绕过手法。
前端 JS 校验绕过
浏览器端用 JavaScript 检查文件后缀(如只允许 .jpg/.png),但服务端未做二次验证。
- 禁用浏览器 JavaScript(F12 → 设置 → 禁用 JS),直接上传 .php 文件
- 用 Burp Suite 抓包,在上传请求中把 filename="test.png" 改为 filename="shell.php"
- 保存页面本地修改,删掉或注释掉
onsubmit="return checkFile()"等校验逻辑
后缀名黑名单绕过
服务端用 in_array() 等函数过滤常见危险后缀(如 .php),但未覆盖全部可解析扩展名或忽略大小写/特殊字符。
- 尝试替代后缀:.php3、.php4、.php5、.phtml、.phar
- 大小写混用:.pHp、.PhP(若未用
strtolower()统一转换) - 末尾加点或空格:shell.php.、shell.php[空格](Windows 系统会自动截断)
- 双写变形:shell.ph
hp
立即学习“PHP免费学习笔记(深入)”;
(部分过滤逻辑会替换一次 "php" 后残留)
MIME 类型与文件头绕过
服务端依赖 $_FILES['file']['type'] 或文件头(如 GIF89a)判断合法性。
- Burp 中将 Content-Type: application/octet-stream 改为 image/png 或 image/gif
- 在 PHP 文件开头插入 GIF89a,伪装成 GIF 图片(通过
getimagesize()校验) - 用命令行合并图片与木马:
copy /b 1.jpg + shell.php webshell.jpg(图片马)
服务器配置类绕过
利用 Apache/Nginx 的解析特性或用户级配置文件,让非 PHP 后缀被当作脚本执行。
- 上传 .htaccess,内容为:
AddType application/x-httpd-php .jpg,再上传 shell.jpg - 上传 .user.ini,内容为:
auto_prepend_file=shell.jpg,触发包含执行 - 上传含
::$DATA的 NTFS 备用流文件名(如shell.php::$DATA),绕过pathinfo()提取逻辑



















