文件上传漏洞学习笔记

ops/2025/2/27 22:54:14/


一、漏洞概述

  1. 定义 文件上传漏洞指未对用户上传的文件进行充分安全校验,导致攻击者可上传恶意文件(如Webshell、木马),进而控制服务器或执行任意代码。

  2. 危害等级 ⚠️ 高危漏洞(通常CVSS评分7.0+),可能导致:

    • 服务器完全沦陷

    • 数据泄露

    • 钓鱼攻击跳板

    • 内网渗透入口


二、常见漏洞触发点

  1. 未校验文件类型 仅依赖前端JS验证或未校验Content-Type。

  2. 黑名单机制缺陷 漏掉冷门可执行后缀(如 .phtml, .php5)。

  3. 路径处理不当 用户可控制上传路径(如 filename=../../uploads/shell.php)。

  4. 未重命名文件 保留用户输入的文件名,导致覆盖或解析漏洞。

  5. 服务器配置错误 如Apache的AddHandler错误配置导致文本文件按脚本解析。


三、攻击方式

1. 直接上传Webshell

  • 经典PHP Webshell

    php

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

  • 绕过技巧:利用短标签 <?=、编码混淆、图片马注入。

2. 钓鱼文件攻击

  • 上传伪装成图片/文档的恶意文件(如 invoice.pdf.exe)。

3. 配合其他漏洞利用

  • 文件包含漏洞:上传含恶意代码的图片,通过LFI执行。

  • 解析漏洞:IIS/nginx错误解析文件名(如 shell.php.jpg)。


四、绕过防御技巧

1. 前端绕过

  • 禁用JS或修改前端校验代码(如删除onsubmit事件)。

2. 黑名单绕过

  • 尝试非常规后缀:.php5, .phtml, .phar, .htaccess(Apache)。

  • 大小写混合:.PhP, .pHp

  • 双写后缀:.pphphp → 过滤后变为 .php

3. MIME类型绕过

  • 修改Content-Type为合法类型:

    httpContent-Type: image/png

4. 文件头伪造

  • 在恶意文件头部添加合法标识:

    php

    GIF89a;
    <?php system($_GET['cmd']); ?>

5. .htaccess攻击(Apache)

  • 上传覆盖.htaccess文件,定义解析规则:

    apache

    AddType application/x-httpd-php .abc

6. 特殊符号截断

  • %00截断(需PHP<5.3):

    filename="shell.php%00.jpg"

7. 解析漏洞利用

  • IIS 6.0/uploads/shell.asp;.jpg 被解析为ASP文件。

  • Nginx畸形路径/uploads/shell.jpg/.php 错误解析为PHP。


五、防御方案

1. 白名单校验

  • 文件扩展名:仅允许 .jpg, .png, .pdf 等必要类型。

  • MIME类型:从服务器端检测 magic number(真实文件类型)。

2. 重命名文件

  • 使用随机哈希值重命名(如 a3F8d9.jpg),避免用户控制文件名。

3. 存储隔离

  • 上传目录禁止脚本执行(通过服务器配置):

    nginx

    location /uploads/ {deny all;
    }

4. 文件内容检测

  • 检查图片文件的宽高属性,验证是否为真实图片。

  • 使用杀毒引擎扫描上传文件。

5. 限制文件大小

  • 设置合理的最大上传尺寸(如10MB)。

6. 日志与监控

  • 记录所有上传行为,对异常文件(如 .php)触发告警。

7. WAF防护

  • 配置规则拦截 <?phpeval( 等危险关键词。


六、实战案例

  1. Discuz! 任意文件上传漏洞 通过修改上传请求的 filename 参数绕过后缀检测。

  2. WordPress插件漏洞 某些插件未校验非Ajax上传路径,导致可直接上传PHP文件。


七、测试工具

  1. Burp Suite 拦截修改上传请求,测试绕过逻辑。

  2. Webshell管理工具 AntSword、Cknife、Behinder(需合法授权使用)。


八、学习资源

  1. OWASP文件上传防护指南: Unrestricted File Upload | OWASP Foundation

  2. Upload Labs靶场: GitHub搜索 "upload-labs" 练习绕过技巧

  3. 《Web安全攻防:渗透测试实战指南》第6章


http://www.ppmy.cn/ops/161787.html

相关文章

Pytorch使用手册-音频 I/O(专题十八)

音频输入/输出 本教程展示了如何使用TorchAudio的基本输入/输出(I/O)API来检查音频数据,将其加载到PyTorch张量中,并保存PyTorch张量。 警告 在最近的版本中,音频输入/输出进行了多个计划或已实施的更改。有关这些更改的详细信息,请参考“Dispatcher 介绍”。 import to…

muduo网络库2

Muduo网络库&#xff1a;底层实质上为Linux的epoll pthread线程池&#xff0c;且依赖boost库。 muduo的网络设计核心为一个线程一个事件循环&#xff0c;有一个main Reactor负载accept连接&#xff0c;然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor)&…

在Linux、Windows和macOS上部署DeepSeek模型的最低配置要求

随着大语言模型&#xff08;如DeepSeek&#xff09;的普及&#xff0c;许多开发者和企业希望在本地环境中部署这类模型以满足定制化需求。然而&#xff0c;不同操作系统的软硬件生态差异较大&#xff0c;选择合适的配置是成功部署的关键。本文将为Linux、Windows和macOS用户提供…

《Keras 3 使用 PointNet 进行点云分类》:此文为AI自动翻译

《Keras 3 使用 PointNet 进行点云分类》 作者:David Griffiths 创建日期:2020/05/25 最后修改时间:2024/01/09 描述:实现 PointNet for ModelNet10 分类。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 点云分类 介绍 无序 3D 点集(即点云)的分类、检测和分…

java23种设计模式-观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;学习笔记 编程相关书籍分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145884039 1.…

日本IT|SQL工程师的工作内容以及所需的技能·资格

SQLエンジニアとは&#xff1f; 1.データベースの設計・開発、管理、運用を担うエンジニア データ抽出と整形 SQLエンジニアにおいて、データの抽出と整形は重要な仕事です。 リレーショナルデータベースではテーブルという形式でデータを管理しており、複数のテーブルから…

应对现代生活的健康养生指南

在科技飞速发展的现代社会&#xff0c;人们的生活方式发生了巨大改变&#xff0c;随之而来的是一系列健康问题。快节奏的生活、高强度的工作以及电子产品的过度使用&#xff0c;让我们的身体承受着前所未有的压力。因此&#xff0c;掌握正确的健康养生方法迫在眉睫。 针对久坐不…

编程小白冲Kaggle每日打卡(13)--kaggle学堂:<机器学习简介>基础数据探索

Kaggle官方课程链接&#xff1a;Basic Data Exploration 本专栏旨在Kaggle官方课程的汉化&#xff0c;让大家更方便地看懂。 Basic Data Exploration 加载并理解您的数据。 使用Pandas熟悉您的数据 任何机器学习项目的第一步都是熟悉数据。您将使用Pandas库进行此操作。Pand…