文件上传漏洞学习笔记

news/2025/2/26 19:07:11


一、漏洞概述

  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.niftyadmin.cn/n/5869089.html

相关文章

PDF转HTML 超级好用 免费在线转换PDF 完美转换格式

PDF转HTML 超级好用 免费在线转换PDF 完美转换格式&#xff0c;PDF已成为一种广泛使用的文件格式&#xff0c;用于保存和分享文档。然而&#xff0c;PDF文件在某些场景下可能不够灵活&#xff0c;特别是在需要在网页上直接展示其内容时。为了满足这一需求&#xff0c;小白工具推…

自定义提交按钮触发avue-form绑定的submit事件

场景 使用avue-form时&#xff0c;提交按钮会绑定至form区域下方&#xff0c;如果想自定义按钮位置&#xff0c;需要通过dialog的footer位置进行编写&#xff0c;例如&#xff1a; <avue-form ref"form" v-model"dataInfo" :option"dataInfoOpti…

大语言模型的不足与研究热点

大语言模型的不足 技术局限性 理解与判断不足&#xff1a;缺乏人类的直觉和伦理判断&#xff0c;可能生成不准确或道德争议内容&#xff0c;例如在复杂伦理决策中表现不佳。 上下文依赖性&#xff1a;对输入上下文的完整性要求较高&#xff0c;若信息模糊或不完整&#xff0c…

汽车制造又一革新:Profinet-EtherCAT实现高精度激光焊接

通过稳联技术Profinet到EtherCAT网关&#xff0c;将PLC控制系统与激光焊接机器人连接&#xff0c;实现高精度的汽车车身焊接。 在现代汽车制造过程中&#xff0c;装配线的自动化程度直接影响生产效率和产品质量。某知名汽车制造厂引入了稳联技术Profinet转EtherCAT协议网关&…

Language Models are Unsupervised Multitask Learners,GPT-2详细讲解

1542M1.542B15.42亿个 1.背景和动机 1.GPT-1在特定自然语言理解任务标注较少情况下&#xff0c;通过利用大量无标注数据&#xff0c;取得较强性能 2.BERT性能超越GPT-1&#xff0c;GPT-2通过构建更大数据集和模型&#xff0c;同时在zero-shot的多任务学习场景中展示不错性能 …

React加TypeScript最新部署完整版

React TypeScript 全流程部署指南 一、环境准备与项目初始化 关于node.js及npm的安装请参见我的文章。 1.1 创建项目&#xff08;React TypeScript&#xff09; # 使用官方推荐脚手架&#xff08;Vite 5.x&#xff09; npx create-vitelatest my-app --template react-ts …

Java Web开发实战与项目——项目集成与部署

软件开发中&#xff0c;集成与部署是非常关键的一步。无论是将前端与后端模块进行有效的集成&#xff0c;还是通过自动化构建工具&#xff08;如Maven&#xff09;和CI/CD工具&#xff08;如Jenkins&#xff09;实现自动化部署&#xff0c;都会对项目的开发和发布流程产生深远影…

pyautogui库的screenshot()函数

# 方法一 screenshot pyautogui.screenshot() screenshot.save("screenshot.png")# 方法二 # 获取屏幕分辨率 screen_width, screen_height pyautogui.size()# 截取桌面屏幕 screenshot pyautogui.screenshot(region(0, 0, screen_width, screen_height)) screens…