文件上传漏洞进阶实战


一、文件上传漏洞基础

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. 防御意识: 服务端验证的重要性

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

相关推荐
xixixi777773 小时前
产业全景解读:太空算力、国产芯、国产大模型、6G 空天地、AI 可信身份、后量子安全多线全面突破
人工智能·安全·ai·大模型·数据中心·通信·运营商
m0_466525293 小时前
新品发布 | 绿盟安全智算一体机,构建“算力、调度、安全“深度融合的AI基础设施
人工智能·安全
hz567893 小时前
内网视频会议系统建设方案:适合政企单位的安全会议选择
安全·云计算·音视频·实时音视频·信息与通信
2603_954708314 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全
冰茶丿5 小时前
嵌入式安全第一关:Secure Boot是怎么保护你的设备的?
嵌入式硬件·安全
长风2307 小时前
Day14: 极限异常演练 —— 验证系统韧性与错误告警生成
人工智能·安全
云水一下8 小时前
DVWA从入门到精通(十七):Open HTTP Redirect(开放重定向)
web安全·dvwa·开放重定向
技术不好的崎鸣同学9 小时前
Windows 命令提示符(CMD)恶意脚本分析篇
网络·windows·安全·系统安全
Sagittarius_A*9 小时前
Docker:渗透前置容器化核心基础
运维·安全·docker·容器
孟郎郎9 小时前
AI 辅助开发编程敏感信息保护安全规范
人工智能·安全·ai·风险·隐患