文件上传漏洞学习笔记


一、漏洞概述

  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章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/977784.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea 部署 AJ-Report 启动的注意事项

AJ-Report 入门参考&#xff1a; AJ-Report 初学(入门教程) gitee 下载&#xff1a;https://gitee.com/anji-plus/report/releases 根据上面提供的 gitee 下载链接&#xff0c;点击直接下载 最上面的就是最新版本的&#xff0c;旧版本往下拉就可以找到&#xff0c;有三个下载…

【Go | 从0实现简单分布式缓存】-3:分布式节点通信

本文目录 一、通信流程二、peers.go三、http.go四、geecache.go五、测试代码 本文为极客兔兔动手写分布式缓存GeeCache学习笔记。 一、通信流程 在前面一节中&#xff0c;已经为 HTTPPool 实现了服务端功能&#xff0c;通信不仅需要服务端还需要客户端&#xff0c;因此本节来…

Win32/ C++ 简易对话框封装框架(多语言, 通知栏菜单, 拖拽文件处理)

Win32 简易对话框封装简易框架示例 1. 菜单操作: 多语言 2. 通知栏图标菜单 3. 其他操作: 接受拖拽文件等等 CDialogFrame.h #pragma once #include "CWindow/CDialogBase.h" #include "CNSFHeader.h" #include "Win32Utils/CBytesUtils.h" …

如何在 Linux 上安装和配置 Zsh

文章目录 如何在 Linux 上安装和配置 Zsh1. 安装 Zsh1.1 在 Ubuntu/Debian 上安装1.2 在 CentOS/RHEL/Fedora 上安装1.3 在 Arch Linux 上安装1.4 验证 Zsh 安装 2. 设置 Zsh 为默认 Shell2.1 验证默认 shell 3. 配置 Zsh3.1 使用 Oh My Zsh3.1.1 安装 Oh My Zsh3.1.2 启用插件…

Ubuntu搭建esp32环境 配置打开AT指令集 websocket功能

1&#xff0c;搭建前提 环境搭建参考乐鑫官网给的本地编译 ESP-AT 工程方法 因为公司电脑和网络的特殊性&#xff0c;不能正确解析域名&#xff08;仅在浏览器上可以访问&#xff09; &#xff0c;所以这边访问的时候改成了ssh 未了避免使用外网困难的问题&#xff0c;这里用…

网络安全第三次练习

一、实验拓扑 二、实验要求 配置真实DNS服务信息&#xff0c;创建虚拟服务&#xff0c;配置DNS透明代理功能 三、需求分析 1.创建用户并配置认证策略 2.安全策略划分接口 3.ip与策略配置 四、实验步骤 1.划分安全策略接口 2.创建用户并进行策略认证 3.配置安全策略 4.NAT配…

Web自动化之Selenium下Chrome与Edge的Webdriver常用Options参数

目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性&#xff1b;消息完整性&#xff1b;可访问性与可用性&#xff1b;身份认证。 二、网络安全威胁 窃听&#xff1b;插入&#xff1b;假冒&#xff1b;劫持&#xff1b;拒绝服务Dos和分布式拒绝服务…

2024年国赛高教杯数学建模D题反潜航空深弹命中概率问题解题全过程文档及程序

2024年国赛高教杯数学建模 D题 反潜航空深弹命中概率问题 原题再现 应用深水炸弹&#xff08;简称深弹&#xff09;反潜&#xff0c;曾是二战时期反潜的重要手段&#xff0c;而随着现代军事技术的发展&#xff0c;鱼雷已成为现代反潜作战的主要武器。但是&#xff0c;在海峡或…

在vscode中编译运行c语言文件,配置并运行OpenMP多线程并行程序设计

1.下载安装vscode Visual Studio Code - Code Editing. Redefined 2.安装vscode扩展 打开vscode,按ctrl+shift+x,打开扩展,搜索c/c++,下载相应的扩展 3.下载MinGW-w64 MinGW-w64 提供了 GNU 编译器集合,可以编译c/c++文件 这里下载见我的资源,可直接下载 把压缩包解压…

PyCharm Professional 2025 安装配置全流程指南(Windows平台)

一、软件定位与核心功能 PyCharm 2025 是 JetBrains 推出的智能 Python IDE&#xff0c;新增深度学习框架自动补全、实时性能热力图等功能1。相较于社区版&#xff0c;专业版支持&#xff1a; Web开发&#xff08;Django/Flask&#xff09;数据库工具&#xff08;PostgreSQL/…

从两地三中心到多地多中心,OceanBase如何实现金融级高可用

“两地三中心”已成为金融领域基准的容灾部署模式。本文将简要阐述金融行业容灾架构中“两地三中心”的具体要求和部署&#xff0c;并进一步探讨OceanBase在实现“两地三中心”标准后&#xff0c;再至“多地多中心”部署中所展现的独特优势与特点。 商业银行的容灾要求 《商业…

九、数据治理架构流程

一、总体结构 《数据治理架构流程图》&#xff08;Data Governance Architecture Flowchart&#xff09; 水平结构&#xff1a;流程图采用水平组织&#xff0c;显示从数据源到数据应用的进程。 垂直结构&#xff1a;每个水平部分进一步划分为垂直列&#xff0c;代表数据治理的…

6.将cr打包成网络服务|使用postman进行测试|编写oj_server的服务路由功能(C++)

将cr打包成网络服务 compile_server.cc #include "compile_run.hpp" #include "../comm/httplib.h"using namespace ns_compile_and_run; using namespace httplib;//编译服务随时可能被多个人请求&#xff0c;必须保证传递上来的code&#xff0c;形成源…

js前端数据加密 CryptoJS库加密 黑盒情况下寻找web的加密算法 代码混淆

前言 前端的数据加密是对用户的输入的一个常见的加密方法 还有的就是防止我们的sql注入 如 idMQ 这个其实解密出来就是 id 1 所以注入的思路就是 把 1和payload 一起加密然后 再进行注入 客户端的加密 > 数据加密传输 > 服务端解密 > 服务端的处理 传输的…

window平台上qtcreator上使用opencv报错

平台&#xff1a;win11 随便在网上下载一个别人编译好的opencv,发现运行报错 发现此次下载的opencv&#xff0c;别人在编译时选用的mingw版本应该和我电脑目前安装的mingw的版本不太一致 右键桌面的qtcreator图标&#xff0c;进入Tools目录&#xff0c;可以看到mingw的版本是…

Android之APP更新(通过接口更新)

文章目录 前言一、效果图二、实现步骤1.AndroidManifest权限申请2.activity实现3.有版本更新弹框UpdateappUtilDialog4.下载弹框DownloadAppUtils5.弹框背景图 总结 前言 对于做Android的朋友来说&#xff0c;APP更新功能再常见不过了&#xff0c;因为平台更新审核时间较长&am…

数字信任的底层逻辑:密码学核心技术与现实应用

安全和密码学 --The Missing Semester of Your CS Education 目录 熵与密码强度密码散列函数密钥体系 3.1 对称加密 3.2 非对称加密信任模型对比典型应用案例安全实践建议扩展练习杂项 密码学是构建数字信任的基石。 本文浅析密码学在现实工具中的应用&#xff0c;涵盖 1&…

达梦有没有类似oerr的功能

在oracle 23ai的sqlplus中&#xff0c;直接看异常信息说明&#xff1a; 达梦没有此功能&#xff0c;但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…

linux--多进程开发(5)--进程

进程间通讯概念 每两个进程之间都是独立的资源分配单元&#xff0c;不同进程之间不能直接访问另一个进程的资源。 但不同的进程需要进行信息的交互和状态的传递等&#xff0c;因此需要进程间通信&#xff08;IPC,inter processes cimmunication) 进程通信的目的&#xff1a; …