upload-labs_通关tips
字数 1943 2025-08-11 08:36:04

文件上传漏洞全面攻防指南

0x001 文件上传漏洞原理

攻击者上传可执行文件到服务器并执行,上传的文件类型通常包括:

  • 木马
  • 病毒
  • 恶意脚本
  • Webshell

0x002 漏洞利用条件

  1. 上传的文件能够被服务器当作脚本解析
  2. 攻击者能够访问上传文件的路径

0x003 查找上传点方法

  1. 使用工具扫描目录
  2. 查看是否有UPLOAD等目录
  3. 寻找任何上传功能点(文件或图片上传)

0x004 文件上传漏洞类型及绕过方法

0x004.1 前端验证绕过

特征:上传被限制但数据包未到达代理工具就弹出提示

绕过方法1

  1. 按F12查看前端代码
  2. 找到验证函数(如checkFile)
  3. 将返回false改为返回true

绕过方法2

  1. 上传合法文件(如jpg)
  2. 抓包修改文件扩展名为php

0x004.2 MIME验证绕过

特征:服务器检查Content-Type

绕过方法

  1. 上传正常图片文件并抓包
  2. 记录图片的Content-Type(如image/jpeg)
  3. 上传恶意文件时使用记录的Content-Type替换原本的application/octet-stream

0x004.3 黑名单验证(部分后缀名)

特征:常见php扩展名被过滤

绕过方法

  • 尝试其他可解析为PHP的扩展名:
    • .phtml
    • .phps
    • .php1
    • .php4
    • .pht

原理:Apache配置中可能包含:

AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht

0x004.4 黑名单验证(.htaccess)

绕过方法

  1. 上传.htaccess文件,内容为:
<FilesMatch ".jpg$">
SetHandler application/x-httpd-php
</FilesMatch>
  1. 上传.jpg格式的恶意文件

0x004.5 黑名单验证(user.ini)

利用条件

  1. 服务器脚本语言为PHP
  2. 服务器使用CGI/FastCGI模式
  3. 上传目录下有可执行的php文件

绕过方法1

  1. 创建.user.ini文件,内容:
auto_prepend_file=123.jpg
  1. 上传123.jpg的一句话木马
  2. 访问目录下的php文件触发

绕过方法2

  • 上传文件名格式:123.php. (加点空格点)

原理:Apache从右向左解析,最终解析为php文件

0x004.6 黑名单验证(大小写绕过)

特征:未使用strtolower函数统一大小写

绕过方法

  • 使用大小写混合扩展名,如:
    • .PhP
    • .pHp
    • .pHP

0x004.7 黑名单验证(空格绕过)

特征:未过滤文件名末尾空格

绕过方法

  1. 上传文件名格式:123.php (php后加空格)
  2. 使用Burp Suite修改请求,在扩展名后添加空格

0x004.8 黑名单验证(点号绕过)

特征:未使用deldot()过滤文件名末尾的点

绕过方法

  • 上传文件名格式:123.php.

原理strrchr($file_name,'.')获取最后一个点后的内容

0x004.9 黑名单验证(数据流绕过)

特征:未过滤::$DATA数据流标记

绕过方法

  1. 上传文件名格式:123.php::$DATA
  2. 访问时去掉::$DATA

原理:NTFS文件系统中的数据流特性

0x004.10 黑名单验证(双写绕过)

特征:使用str_ireplace替换危险扩展名

绕过方法

  • 上传文件名格式:123.phphpp
  • 替换后变为123.php

0x004.11 白名单绕过(%00截断)

利用条件

  • PHP版本<5.3.4
  • magic_quotes_gpc关闭

绕过方法

  1. 上传文件名格式:123.php%00.jpg
  2. 检测时为jpg,保存时%00截断生效

0x004.12 白名单绕过(路径可控)

绕过方法

  1. 上传文件名格式:123.php .jpg(php后加空格)
  2. 抓包修改空格为十六进制00

0x004.13 图片马

绕过方法

  1. 在恶意脚本前添加文件头,如GIF89a
  2. 配合文件包含漏洞执行

0x005 防御措施

  1. 文件类型白名单:严格限制允许上传的文件类型
  2. 文件名过滤:过滤特殊字符和危险扩展名
  3. 文件大小限制:防止上传过大文件
  4. 安全上传路径:限制上传目录权限
  5. 文件内容检查:检查文件真实类型和内容
  6. 权限控制:限制上传文件的执行权限
  7. 安全编码:使用安全的文件处理函数
  8. 日志记录:记录所有上传行为
  9. 随机化文件名:防止直接访问上传文件
  10. 杀毒扫描:对上传文件进行病毒扫描

0x006 高级技巧

  1. 结合解析漏洞:利用服务器解析特性(如IIS6.0解析漏洞)
  2. 图片渲染:通过二次渲染绕过内容检查
  3. 条件竞争:利用文件上传与删除的时间差
  4. 特殊字符:尝试使用特殊字符绕过(如; +等)
  5. HTTP头注入:修改Content-Disposition等头部

通过全面理解这些攻击手法和防御措施,可以有效提升文件上传功能的安全性。

文件上传漏洞全面攻防指南 0x001 文件上传漏洞原理 攻击者上传可执行文件到服务器并执行,上传的文件类型通常包括: 木马 病毒 恶意脚本 Webshell 0x002 漏洞利用条件 上传的文件能够被服务器当作脚本解析 攻击者能够访问上传文件的路径 0x003 查找上传点方法 使用工具扫描目录 查看是否有UPLOAD等目录 寻找任何上传功能点(文件或图片上传) 0x004 文件上传漏洞类型及绕过方法 0x004.1 前端验证绕过 特征 :上传被限制但数据包未到达代理工具就弹出提示 绕过方法1 : 按F12查看前端代码 找到验证函数(如checkFile) 将返回false改为返回true 绕过方法2 : 上传合法文件(如jpg) 抓包修改文件扩展名为php 0x004.2 MIME验证绕过 特征 :服务器检查Content-Type 绕过方法 : 上传正常图片文件并抓包 记录图片的Content-Type(如image/jpeg) 上传恶意文件时使用记录的Content-Type替换原本的application/octet-stream 0x004.3 黑名单验证(部分后缀名) 特征 :常见php扩展名被过滤 绕过方法 : 尝试其他可解析为PHP的扩展名: .phtml .phps .php1 .php4 .pht 原理 :Apache配置中可能包含: 0x004.4 黑名单验证(.htaccess) 绕过方法 : 上传.htaccess文件,内容为: 上传.jpg格式的恶意文件 0x004.5 黑名单验证(user.ini) 利用条件 : 服务器脚本语言为PHP 服务器使用CGI/FastCGI模式 上传目录下有可执行的php文件 绕过方法1 : 创建.user.ini文件,内容: 上传123.jpg的一句话木马 访问目录下的php文件触发 绕过方法2 : 上传文件名格式: 123.php. (加点空格点) 原理 :Apache从右向左解析,最终解析为php文件 0x004.6 黑名单验证(大小写绕过) 特征 :未使用strtolower函数统一大小写 绕过方法 : 使用大小写混合扩展名,如: .PhP .pHp .pHP 0x004.7 黑名单验证(空格绕过) 特征 :未过滤文件名末尾空格 绕过方法 : 上传文件名格式: 123.php (php后加空格) 使用Burp Suite修改请求,在扩展名后添加空格 0x004.8 黑名单验证(点号绕过) 特征 :未使用deldot()过滤文件名末尾的点 绕过方法 : 上传文件名格式: 123.php. 原理 : strrchr($file_name,'.') 获取最后一个点后的内容 0x004.9 黑名单验证(数据流绕过) 特征 :未过滤::$DATA数据流标记 绕过方法 : 上传文件名格式: 123.php::$DATA 访问时去掉 ::$DATA 原理 :NTFS文件系统中的数据流特性 0x004.10 黑名单验证(双写绕过) 特征 :使用str_ ireplace替换危险扩展名 绕过方法 : 上传文件名格式: 123.phphpp 替换后变为 123.php 0x004.11 白名单绕过(%00截断) 利用条件 : PHP版本 <5.3.4 magic_ quotes_ gpc关闭 绕过方法 : 上传文件名格式: 123.php%00.jpg 检测时为jpg,保存时%00截断生效 0x004.12 白名单绕过(路径可控) 绕过方法 : 上传文件名格式: 123.php .jpg (php后加空格) 抓包修改空格为十六进制00 0x004.13 图片马 绕过方法 : 在恶意脚本前添加文件头,如 GIF89a 配合文件包含漏洞执行 0x005 防御措施 文件类型白名单 :严格限制允许上传的文件类型 文件名过滤 :过滤特殊字符和危险扩展名 文件大小限制 :防止上传过大文件 安全上传路径 :限制上传目录权限 文件内容检查 :检查文件真实类型和内容 权限控制 :限制上传文件的执行权限 安全编码 :使用安全的文件处理函数 日志记录 :记录所有上传行为 随机化文件名 :防止直接访问上传文件 杀毒扫描 :对上传文件进行病毒扫描 0x006 高级技巧 结合解析漏洞 :利用服务器解析特性(如IIS6.0解析漏洞) 图片渲染 :通过二次渲染绕过内容检查 条件竞争 :利用文件上传与删除的时间差 特殊字符 :尝试使用特殊字符绕过(如; +等) HTTP头注入 :修改Content-Disposition等头部 通过全面理解这些攻击手法和防御措施,可以有效提升文件上传功能的安全性。