文件上传漏洞进阶实战


一、文件上传漏洞基础

1.1 什么是文件上传漏洞

文件上传漏洞是指攻击者通过上传恶意文件(如WebShell)到服务器,从而获取服务器控制权的漏洞。

危害:

  • 上传WebShell获取服务器权限
  • 上传恶意脚本执行任意代码
  • 上传病毒文件传播恶意软件

1.2 文件上传流程

复制代码
用户选择文件 → 客户端验证 → 服务端验证 → 文件存储 → 文件访问

常见验证方式:

验证位置 验证内容 安全性
客户端JS 文件扩展名、大小 低(可绕过)
服务端 文件扩展名、MIME类型、文件内容
服务器配置 文件解析规则

二、文件上传闯关实战

2.1 Pass-1:JS前端验证绕过

思路: 前端验证可以被绕过

步骤:

  1. 准备PHP木马文件 shell.php

  2. 修改文件扩展名为 .jpg

  3. 上传(前端验证通过)

  4. 用Burp Suite拦截请求,修改扩展名为 .php

  5. 发送请求,上传成功

2.2 Pass-2:Content-Type验证绕过

思路: 修改Content-Type头

步骤:

复制代码
# 原始请求
Content-Type: image/jpeg

# 修改为
Content-Type: application/x-php

2.3 Pass-3:黑名单绕过(.htaccess)

思路: 通过.htaccess配置让服务器解析特定扩展名

步骤:

  1. 上传 .htaccess 文件:

    <FilesMatch "shell.jpg">
    SetHandler application/x-httpd-php

  2. 上传 shell.jpg(包含PHP代码)

  3. 访问 shell.jpg 执行PHP代码

2.4 Pass-4:白名单绕过(图片木马)

思路: 图片中嵌入PHP代码

步骤:

复制代码
# 制作图片木马(Linux)
cat shell.php >> image.jpg

# 制作图片木马(Windows)
copy /b image.jpg + shell.php shell.jpg

2.5 Pass-5:二次渲染绕过

思路: 绕过服务器对图片的二次处理

步骤:

  1. 上传正常图片 test.jpg

  2. 下载服务器处理后的图片

  3. 对比原始图片和处理后的图片

  4. 在相同位置插入PHP代码

  5. 重新上传修改后的图片

2.6 Pass-6:条件竞争绕过

思路: 利用服务器处理时间差

步骤:

  1. 快速上传大量请求

  2. 在服务器删除文件前访问文件

  3. 执行恶意代码


三、容器解析漏洞

3.1 Tomcat解析漏洞

原理: Tomcat对特定扩展名的解析存在漏洞

步骤:

复制代码
# 上传文件
shell.jsp%00.jpg

# 访问执行
http://target.com/shell.jsp%00.jpg

3.2 Nginx解析漏洞

原理: Nginx对.php文件的解析存在漏洞

步骤:

复制代码
# 上传图片木马
shell.jpg

# 通过特定URL访问执行
http://target.com/shell.jpg/.php

3.3 Apache解析漏洞

原理: Apache按从右到左的顺序解析扩展名

步骤:

复制代码
# 上传文件
shell.php.abc.def

# Apache会解析为PHP文件执行

四、编辑器漏洞(FCKEditor)

4.1 搭建环境

复制代码
# 下载FCKEditor
git clone https://github.com/fckeditor/fckeditor.git

# 修改配置文件
vim config.php

4.2 漏洞利用

步骤:

  1. 访问FCKEditor编辑器

  2. 在文件管理中新建PHP文件

  3. 写入WebShell代码

  4. 访问执行


五、文件上传防御

5.1 服务端验证

复制代码
<?php
// 获取文件扩展名
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

// 白名单验证
$allowed_ext = ['jpg', 'png', 'gif'];
if (!in_array(strtolower($ext), $allowed_ext)) {
    die('不允许的文件类型');
}

// 文件内容验证
$finfo = new Finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($_FILES['file']['tmp_name']);
if (!in_array($mime, ['image/jpeg', 'image/png', 'image/gif'])) {
    die('文件内容不符合要求');
}

// 随机重命名
$new_name = uniqid() . '.' . $ext;
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $new_name);
?>

5.2 安全配置

措施 说明
**禁用脚本执行** 在上传目录禁止PHP执行
**随机文件名** 防止文件覆盖和猜测
**限制文件大小** 防止DoS攻击
**使用CDN** 将静态文件托管到CDN
**定期审计** 检查上传目录的异常文件

5.3 服务器配置示例

Nginx配置(禁止PHP执行):

复制代码
location /uploads/ {
    location ~ \.php$ {
        deny all;
    }
}

Apache配置:

复制代码
<Directory "/var/www/uploads">
    php_flag engine off
</Directory>

六、总结

文件上传要点

类型 说明
**原理** 上传恶意文件到服务器
**危害** 获取服务器权限、执行任意代码
**防御** 白名单验证、文件内容检测、安全配置

学习建议

  1. 练习靶场: Upload-labs、Pikachu

  2. 掌握工具: Burp Suite、dirsearch

  3. 理解原理: 容器解析机制、文件处理流程

  4. 防御意识: 服务端验证的重要性

**安全提醒:** 本文仅供学习研究,请勿用于非法用途!

相关推荐
淼淼爱喝水3 小时前
DVWA靶场命令注入漏洞检测实验
网络·安全·靶场·dvwa
砍材农夫3 小时前
物联网 基于netty核心实战-安全tls
java·开发语言·前端·物联网·安全
无风听海3 小时前
构建现代 Web 应用的令牌安全体系:Refresh Token Rotation、HttpOnly Cookie 与 Grace Period 全解析
前端·安全
宋浮檀s3 小时前
应急响应——Web高危漏洞应急(SQL注入+XSS跨站+文件上传)
前端·网络·安全·web安全·xss
阿部多瑞 ABU3 小时前
一次针对大语言模型的“虚构历史前提注入”红队测试实录:当AI相信了不存在的对话历史
网络·人工智能·安全
aaaffaewrerewrwer5 小时前
一个真正“完全浏览器本地运行”的 AVIF 转 WebP 在线工具(无需上传)
安全·个人开发
ylscode12 小时前
PureLogs 信息窃取恶意软件惊现高危变种:借道 MsBuild.exe 进程空心化实施无痕攻击
网络·安全·安全威胁分析
云安全助手13 小时前
2026年企业级Claude中转服务深度评测:安全、稳定与速度的终极答案
人工智能·安全·claude·ai大模型
ylscode16 小时前
Windows 内核惊现高危提权漏洞 CVE-2026-40369:沙箱隔离失效,SYSTEM 权限唾手可得
网络·安全·安全威胁分析