欢迎光临
我们一直在努力

网络安全中级阶段学习笔记(七):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),未验证文件真实内容。

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

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

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

    原理

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

    常用绕过方法
    绕过类型适用场景操作方法
    后缀名漏检 黑名单未过滤.phtml/.php5 等 上传webshell.phtml,若服务器支持该后缀解析则成功
    .htaccess 文件 Apache 服务器,未过滤.htaccess 1. 上传.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 补充说明)

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

  • 漏洞利用核心:找到检测环节的 “薄弱点”(如仅前端验证、未验证文件内容)
  • 绕过思路:“伪装合法”(改后缀、改 MIME、嵌合法内容)+“利用特性”(系统解析、配置文件)
  • 防御核心:“白名单优先”+“多环节验证”+“权限隔离”,避免单一防御失效
  • 七、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版本信息就表示成功了

    赞(0)
    未经允许不得转载:171主机测评 » 网络安全中级阶段学习笔记(七):Web 安全之文件上传漏洞笔记1(包含upload-labs-master靶场前三关实战)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址