news 2026/7/10 14:44:45

网络安全中级阶段学习笔记(七):Web 安全之文件上传漏洞笔记1(包含upload-labs-master靶场前三关实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络安全中级阶段学习笔记(七):Web 安全之文件上传漏洞笔记1(包含upload-labs-master靶场前三关实战)

文件上传漏洞是 Web 安全中高频高危漏洞,攻击者可通过上传恶意脚本(Webshell)控制服务器,窃取或篡改数据。本文基于课程 PPT,整理核心知识点、绕过技巧,并补充防御方案,适合入门学习与实战参考。

一、核心概念速览

1. 文件上传漏洞定义

因服务器对上传文件的后缀、类型、内容等过滤机制不严,导致攻击者可上传恶意脚本文件(如 PHP、ASP 后门),进而获取网站 / 服务器控制权的漏洞。

2. 漏洞危害

  • 控制网站后台,篡改页面内容
  • 读取、修改、删除服务器敏感数据
  • 通过提权漏洞获取主机 root / 管理员权限
  • 植入木马、挖矿程序,沦为僵尸主机

3. Webshell 核心知识

Webshell 是伪装成网页文件的命令执行环境(后门),核心用于控制服务器:

类型特点示例(一句话木马)
大马体积大、功能全、加密隐藏-
小马体积小、仅核心功能(如上传)-
一句话木马代码简洁、隐匿性强、可变形免杀PHP:<?php @eval($_POST['pass']);?>
ASP:<%eval request("pass")%>
ASPX:<@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

4. 漏洞利用三要素

木马上传成功,未被杀
知道木马的路径在哪
上传的木马能正常运行(解析)

二、文件上传核心检测流程

三、经典绕过技巧大全

1. 绕过客户端 JS 验证

原理

客户端通过 JS 脚本限制文件后缀(如仅允许.jpg/.png),未在服务端二次验证。

绕过方法
  • BurpSuite 篡改响应:拦截服务器响应,删除页面中checkFile()等 JS 验证函数

  • 浏览器审计工具:F12 打开开发者工具,删除表单onsubmit="return checkFile()"属性,保存后上传

  • 直接上传恶意文件,用 BurpSuite 拦截修改后缀(适用于仅前端验证场景)

2. 绕过服务端 MIME-Type 验证

原理

服务端通过 HTTP 请求头Content-Type字段判断文件类型(如图片为image/jpeg),未验证文件真实内容。

绕过步骤
  1. 准备恶意文件(如webshell.php,内容为一句话木马)

  2. BurpSuite 拦截上传请求,找到Content-Type: application/octet-stream(默认脚本文件类型)
  3. 修改为允许的类型(如图片类型image/jpegimage/png
  4. 发送请求,文件上传成功
示例对比
状态Content-Type 字段值上传结果
未修改application/octet-stream上传失败
修改后image/jpeg上传成功

3. 绕过服务端黑名单验证

原理

黑名单限制禁止上传的后缀(如.php/.asp),但存在遗漏或可利用的解析特性。

常用绕过方法
绕过类型适用场景操作方法
后缀名漏检黑名单未过滤.phtml/.php5 等上传webshell.phtml,若服务器支持该后缀解析则成功
.htaccess 文件Apache 服务器,未过滤.htaccess1. 上传.htaccess 文件,内容SetHandler application/x-httpd-php(指定目录所有文件按 PHP 解析)2. 上传1.jpg(内容为<?php phpinfo();?>),服务器会按 PHP 执行
大小写绕过Windows 服务器(大小写不敏感)webshell.php改为webshell.PhP,绕过仅过滤小写.php 的黑名单
空格 / 点绕过服务器未处理文件名特殊字符文件名改为webshell.php.(末尾加英文点)或webshell.php(末尾加空格),Windows 会自动去除
::$DATA 绕过Windows 系统文件名改为webshell.php::$DATA,服务器保存时会忽略::$DATA,实际保存为webshell.php
工具实操

用 BurpSuite Intruder 模块枚举后缀名,字典包含.php/.phtml/.php5/.jspx等,寻找黑名单未过滤的可解析后缀。

四、漏洞防御方案(补充知识点)

文件上传漏洞防御需遵循 “多环节、纵深防御” 原则,核心措施如下:

1. 前端防御(辅助,不可单独依赖)

  • 限制文件大小、后缀(仅允许必要类型,如头像仅.jpg/.png)
  • 提示用户上传合法文件,增强用户认知

2. 服务端核心防御

(1)严格的后缀验证
  • 优先使用白名单(仅允许.jpg/.png/.gif/.pdf等必要后缀),拒绝黑名单
  • 过滤特殊字符:去除文件名中的../、空格、点、::$DATA、大小写混合后缀
  • 统一文件名:上传后重命名(如uuid+原始后缀),避免路径泄露
(2)文件类型双重验证
  • 验证Content-Type字段,同时通过文件头检测真实类型(如用exif_imagetype()函数验证图片)
  • 禁止上传.htaccess.user.ini等配置文件(Apache/Nginx)
(3)存储与权限控制
  • 上传文件存储目录禁止执行权限(如 Apache 配置php_flag engine off
  • 独立存储目录:与网站业务目录分离,避免脚本被解析
  • 限制文件大小:防止上传超大文件占用服务器资源
(4)安全工具防护
  • 部署 WAF(Web 应用防火墙),拦截恶意文件上传
  • 开启杀毒软件 / 安全插件,扫描上传文件中的木马
  • 定期更新服务器组件(Apache/Nginx/PHP),修复解析漏洞
(5)日志与监控
  • 记录所有文件上传操作(用户名、时间、文件名、路径)
  • 监控异常文件访问(如上传的图片被频繁访问,且带有cmd/pass等参数)

五、常见错误修正(PPT 补充说明)

  1. PPT 中 “绕过黑名单验证” 代码示例存在重复后缀(如.php多次出现),实际黑名单应去重,且需覆盖所有可解析后缀
  2. 00 截断绕过需满足特定 PHP 版本条件(<5.3.4),高版本已修复,需注明适用场景
  3. .htaccess仅适用于 Apache 服务器,Nginx 需通过user.ini等文件配置,不可通用
  4. 图片马制作时,需确保文件头合法(如GIF89a对应 GIF 图片),否则会被内容检测拦截

六、实战总结

  1. 漏洞利用核心:找到检测环节的 “薄弱点”(如仅前端验证、未验证文件内容)
  2. 绕过思路:“伪装合法”(改后缀、改 MIME、嵌合法内容)+“利用特性”(系统解析、配置文件)
  3. 防御核心:“白名单优先”+“多环节验证”+“权限隔离”,避免单一防御失效

七、upload-labs-master靶场实践(1-3关)

1.Pass-01

发现无法上传php文件,只让上传文件格式的文件

把一句话木马文件后缀改为png上传,然后抓包,因为直接上传php文件他有弹窗抓不到包,抓包之后找到上传的那张图片,将后缀改为php,然后放包

发现.php文件上传成功了,右键点击复制图形连接,

打开中国菜刀,或者蚁剑等连接工具,我这里以中国菜刀为列,右键点击添加

填入复制的文件地址和一句话木马的密码,点击添加。

添加成功

双击刚刚添加的那条记录即可打开查看文件信息。

右键这条记录,点击虚拟终端就可以进入这个系统的终端

2.Pass-02

为了方便直接写一个查看php版本信息的木马

打开第二关

开启bp抓包拦截,上传刚刚创建那个1.png,把1.png改为1.php

放包后发现上传成功

右键复制图片连接

地址栏输入这个地址,显示如下php版本信息就表示成功了

3.Pass-03

打开第三关

点击查看源码,可以看到有黑名单,并且空格,大小写,空值,点号等都被过滤了

这个关卡其实就是寻找有没有其他类型的后缀格式也被识别为.php格式

打开老版本的phpstudy服务器,打开httpd-conf

#去掉之后保存退出,然后重启php服务器,如果不重启会导致修改不生效,依旧无法将phtml文件识别成php文件

然后开启bp抓包,上传1.png文件,修改1.png后缀为1.phtml

上传成功,复制链接

打开图片链接,显示出php版本信息就表示成功了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 5:41:46

自学嵌入式day31,waitpid,system 函数

waitpid 和 wait 函数waitpid(-1, status, 0) 等同于 wait(status)。 waitpid 函数原型为 pid_t waitpid(pid_t pid, int *status, int options)。参数说明&#xff1a;pid 取值决定回收的子进程范围&#xff1a;<-1&#xff1a;回收指定进程组内的任意子进程。-1&#xff1…

作者头像 李华
网站建设 2026/7/10 6:59:15

泛型继承实战指南(高级程序员必知的3个隐秘特性)

第一章&#xff1a;泛型的继承在面向对象编程中&#xff0c;继承是构建可复用、可扩展代码结构的核心机制。当泛型与继承结合使用时&#xff0c;能够实现更加灵活和类型安全的类层次结构。泛型类可以像普通类一样被继承&#xff0c;子类可以固定父类中的类型参数&#xff0c;也…

作者头像 李华
网站建设 2026/7/10 8:10:21

Symfony 8路由系统重构:从延迟2秒到毫秒级响应的优化之路

第一章&#xff1a;Symfony 8路由系统重构&#xff1a;从延迟2秒到毫秒级响应的优化之路在 Symfony 8 的新版本中&#xff0c;路由系统经历了一次深度重构&#xff0c;显著提升了请求解析性能。以往在复杂路由配置下可能出现接近 2 秒的响应延迟&#xff0c;如今已优化至毫秒级…

作者头像 李华
网站建设 2026/7/10 7:44:33

GraphQL + PHP缓存优化:99%开发者忽略的6个关键实践

第一章&#xff1a;GraphQL PHP缓存优化的核心挑战在构建高性能的现代Web应用时&#xff0c;GraphQL与PHP的结合为开发者提供了灵活的数据查询能力&#xff0c;但同时也带来了显著的缓存优化难题。由于GraphQL允许客户端按需请求字段&#xff0c;传统的基于完整页面或接口响应…

作者头像 李华
网站建设 2026/7/10 7:45:24

5、Linux 文件压缩、归档与文本文件管理全解析

Linux 文件压缩、归档与文本文件管理全解析 1. Linux 中的文件压缩 在 Linux 系统里,文件压缩是一项常见且重要的操作,它能有效节省磁盘空间。下面为你介绍几种常用的压缩工具及其使用方法。 1.1 xz 压缩 xz 是 Linux 中空间利用率最高的压缩工具,不过它的压缩速度相对较…

作者头像 李华
网站建设 2026/7/10 7:47:11

6、Linux 文本文件管理实用指南

Linux 文本文件管理实用指南 在 Linux 系统的操作环境中,系统管理员、开发者以及普通用户常常会与文本文件、配置文件和日志文件打交道。这些文件的大小不一,有的文件体积庞大,有的则属于中小型文件。文件中的数据经常需要查看、更新或提取。接下来,我们将详细介绍如何在 …

作者头像 李华