Web 漏洞靶场练习(第一弹)
字数 2089 2025-11-07 08:41:54

Web漏洞靶场教学文档:文件上传漏洞深度解析与实践

一、文件上传漏洞概述

1.1 漏洞定义

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,"文件上传"本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。

1.2 攻击成功条件

  • 上传的文件能够被Web容器解释执行
  • 文件上传后所在的目录是Web容器所覆盖到的路径
  • 用户能够从Web上访问这个文件
  • 用户上传的文件内容未被安全检查、格式化、图片压缩等功能改变

二、WebShell基础

2.1 PHP一句话木马

<?php @eval($_POST['cmd']); ?>

此代码允许攻击者通过POST参数'cmd'执行任意PHP代码。

三、文件上传绕过技术详解

3.1 黑名单绕过技术

3.1.1 大小写绕过

原理:利用系统对大小写不敏感的特性
示例

  • 原始文件名:a.php
  • 绕过方式:a.PHP、a.Php、a.pHp等
  • 适用场景:黑名单仅包含小写.php的情况

3.1.2 空格绕过

原理:系统保存时会自动去除文件名首尾空格
方法

  1. 上传时使用Burp抓包
  2. 在文件名前或后添加空格:a.php a.php
  3. 放包上传

3.1.3 点号绕过

原理:系统会自动过滤文件名末尾的点
方法:将文件名改为a.php.

3.1.4 ::$DATA绕过(仅限Windows)

原理:利用NTFS文件系统特性
方法

  • 文件名改为:a.php::$DATA
  • 访问时需删除URL中的::$DATA

3.1.5 单次过滤绕过

原理:利用过滤规则只执行一次的特性
示例流程

  1. 原始文件名:a.php. .
  2. 删除末尾点:a.php.
  3. 去除首尾空格:a.php.
  4. 黑名单检测通过(因黑名单中无.php.

3.1.6 后缀双写绕过

原理:利用删除特定字符串后形成有效后缀
条件:过滤规则是删除检测到的黑名单后缀
示例

  • 原始文件名:a.pphphp
  • 过滤删除phpa.php
  • 成功绕过检测

3.2 白名单绕过技术

3.2.1 MIME类型检测绕过

原理:修改Content-Type头欺骗服务器
常见MIME类型

  • JPEG图像:image/jpeg
  • PNG图像:image/png
  • GIF图像:image/gif

方法

  1. 上传PHP文件
  2. Burp抓包修改Content-Type为image/jpeg等允许类型
  3. 放包上传

3.2.2 路径栏00截断绕过

条件

  • PHP版本 < 5.3.4
  • magic_quotes_gpc = off
  • 上传路径可控

原理:利用0x00(空字符)作为字符串结束符
方法

  1. 上传文件名为aa.jpg
  2. 修改保存路径为../upload/test.php%00aa.jpg
  3. 最终路径被截断为../upload/test.php

四、upload-labs靶场实战

4.1 Pass-01:禁用JS绕过

漏洞点:前端JavaScript验证
绕过方法

  1. 浏览器禁用JavaScript
    • Firefox:about:config → javascript.enabled = false
    • 开发者工具 → 设置 → 禁用JavaScript
  2. 删除HTML中的checkFile()函数

4.2 Pass-02:MIME类型绕过

漏洞点:仅验证$_FILES['upload_file']['type']
绕过方法:Burp修改Content-Type为image/jpeg等允许类型

4.3 Pass-03:后缀伪造绕过

前置配置:确保服务器能解析.php3、.php5等后缀
方法:修改文件后缀为.php3、.php5等

4.4 Pass-04:.htaccess配置解析绕过

前置配置

  1. 开启mod_rewrite模块
  2. 修改httpd.conf中AllowOverride None为AllowOverride All
  3. 添加RewriteEngine On配置

方法

  1. 上传.htaccess文件内容:
AddType application/x-httpd-php .jpg
  1. 上传jpg格式的WebShell

五、防御措施

5.1 基础防御策略

  1. 文件类型验证

    • 使用白名单机制
    • 验证文件签名而非扩展名
  2. 文件内容检查

    • 检测恶意代码模式
    • 图像文件重压缩处理
  3. 存储安全

    • 上传目录禁用脚本执行权限
    • 随机化文件名
    • 控制文件访问权限

5.2 服务器配置

  1. Web服务器安全配置
  2. PHP安全设置(magic_quotes_gpc等)
  3. 定期更新和补丁管理

5.3 安全开发实践

  1. 输入验证和过滤
  2. 错误信息处理
  3. 安全编码规范

六、总结

文件上传漏洞是Web安全中的重要攻击向量,攻击手法多样且不断演进。通过upload-labs靶场的实践,安全人员可以深入理解各种绕过技术的原理和实现方式,从而更好地制定防御策略。在实际应用中,需要采取多层次、纵深的安全防护措施,确保文件上传功能的安全性。

重要提醒:本文内容仅用于安全学习和授权测试,未经授权对他人系统进行测试属于违法行为。

Web漏洞靶场教学文档:文件上传漏洞深度解析与实践 一、文件上传漏洞概述 1.1 漏洞定义 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,"文件上传"本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。 1.2 攻击成功条件 上传的文件能够被Web容器解释执行 文件上传后所在的目录是Web容器所覆盖到的路径 用户能够从Web上访问这个文件 用户上传的文件内容未被安全检查、格式化、图片压缩等功能改变 二、WebShell基础 2.1 PHP一句话木马 此代码允许攻击者通过POST参数'cmd'执行任意PHP代码。 三、文件上传绕过技术详解 3.1 黑名单绕过技术 3.1.1 大小写绕过 原理 :利用系统对大小写不敏感的特性 示例 : 原始文件名:a.php 绕过方式:a.PHP、a.Php、a.pHp等 适用场景:黑名单仅包含小写.php的情况 3.1.2 空格绕过 原理 :系统保存时会自动去除文件名首尾空格 方法 : 上传时使用Burp抓包 在文件名前或后添加空格: a.php 或 a.php 放包上传 3.1.3 点号绕过 原理 :系统会自动过滤文件名末尾的点 方法 :将文件名改为 a.php. 3.1.4 ::$DATA绕过(仅限Windows) 原理 :利用NTFS文件系统特性 方法 : 文件名改为: a.php::$DATA 访问时需删除URL中的 ::$DATA 3.1.5 单次过滤绕过 原理 :利用过滤规则只执行一次的特性 示例流程 : 原始文件名: a.php. . 删除末尾点: a.php. 去除首尾空格: a.php. 黑名单检测通过(因黑名单中无 .php. ) 3.1.6 后缀双写绕过 原理 :利用删除特定字符串后形成有效后缀 条件 :过滤规则是删除检测到的黑名单后缀 示例 : 原始文件名: a.pphphp 过滤删除 php : a.php 成功绕过检测 3.2 白名单绕过技术 3.2.1 MIME类型检测绕过 原理 :修改Content-Type头欺骗服务器 常见MIME类型 : JPEG图像:image/jpeg PNG图像:image/png GIF图像:image/gif 方法 : 上传PHP文件 Burp抓包修改Content-Type为image/jpeg等允许类型 放包上传 3.2.2 路径栏00截断绕过 条件 : PHP版本 < 5.3.4 magic_ quotes_ gpc = off 上传路径可控 原理 :利用0x00(空字符)作为字符串结束符 方法 : 上传文件名为 aa.jpg 修改保存路径为 ../upload/test.php%00aa.jpg 最终路径被截断为 ../upload/test.php 四、upload-labs靶场实战 4.1 Pass-01:禁用JS绕过 漏洞点 :前端JavaScript验证 绕过方法 : 浏览器禁用JavaScript Firefox:about:config → javascript.enabled = false 开发者工具 → 设置 → 禁用JavaScript 删除HTML中的checkFile()函数 4.2 Pass-02:MIME类型绕过 漏洞点 :仅验证$_ FILES[ 'upload_ file'][ 'type' ] 绕过方法 :Burp修改Content-Type为image/jpeg等允许类型 4.3 Pass-03:后缀伪造绕过 前置配置 :确保服务器能解析.php3、.php5等后缀 方法 :修改文件后缀为.php3、.php5等 4.4 Pass-04:.htaccess配置解析绕过 前置配置 : 开启mod_ rewrite模块 修改httpd.conf中AllowOverride None为AllowOverride All 添加RewriteEngine On配置 方法 : 上传.htaccess文件内容: 上传jpg格式的WebShell 五、防御措施 5.1 基础防御策略 文件类型验证 使用白名单机制 验证文件签名而非扩展名 文件内容检查 检测恶意代码模式 图像文件重压缩处理 存储安全 上传目录禁用脚本执行权限 随机化文件名 控制文件访问权限 5.2 服务器配置 Web服务器安全配置 PHP安全设置(magic_ quotes_ gpc等) 定期更新和补丁管理 5.3 安全开发实践 输入验证和过滤 错误信息处理 安全编码规范 六、总结 文件上传漏洞是Web安全中的重要攻击向量,攻击手法多样且不断演进。通过upload-labs靶场的实践,安全人员可以深入理解各种绕过技术的原理和实现方式,从而更好地制定防御策略。在实际应用中,需要采取多层次、纵深的安全防护措施,确保文件上传功能的安全性。 重要提醒 :本文内容仅用于安全学习和授权测试,未经授权对他人系统进行测试属于违法行为。