文件上传绕过方法

本文主要介绍文件上传校验的绕过方法,包括前端验证绕过、mime限制扩展名绕过、服务端黑名单和白名单校验后缀名绕过等。还提及利用操作系统特性、服务器解析漏洞、结合文件包含等方式绕过校验,以及超大内容和二次渲染绕过文件内容检验的方法。

绕过

前端验证绕过

对于前端验证的校验,可以直接修改前端 js ,添加允许PHP扩展名。
或者上传.gif 文件然后用burp抓包,修改文件修改成PHP。

mime 限制扩展名绕过

修改concent-type

服务端黑名单校验后缀名的绕过

黑名单的意思就是服务端不允许哪些后缀名通过,但是存在一定的遗漏,可以尝试以下的后缀名,更改大小写或双写。

php php3-5 phtml PHP pHp phtm pphphp

jsp jspx jspf

asp aspx asa cer

exe exee

phtml 被解析的条件是Apache的配置文件中 AddYtpe 去掉#号

伪静态文件绕过

先创建一个.htaccess文件上传上去
写入 SetHandler application/x-httpd-php 这样所有上传的文件都可以用php来解析执行
再上传一个恶意代码的图片文件
访问上传图片,webshell 执行成功

Apache的解析机制绕过

APACHE默认文件名中可以带.号,当解析文件遇到.号时,从右至左依次解析。比如:test.php.xxx.aaa,.xxx和.aaa这两种后缀是apache不可识别解析,apache就会把test.php.xxx.aaa解析成test.php

利用Windows操作系统的特性绕过

Winserver下的xx.jpg[空格] 或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点

所以可以利用windows默认取出后缀名的空格和点的特性,在上传文件后缀后面添加空格和点可以绕过。

利用Windows操作系统NTFS文件流格式的解析特性,在文件名后添加::DATA,可以绕过。虽然在网页上显示的后缀是带有::DATA,可以绕过。 虽然在网页上显示的后缀是带有::DATA,::DATA的,但在系统里面就没有后面的符号了,可以直接访问。

服务端白名单校验后缀名的绕过

00截断

主要存在于PHP 5.3.4以下的版本,通常存在于构造上传文件路径的时候。当服务器判断文件名后缀正常时,存入路径后便不再检查,这时候使用截断,服务器在存入路径的过程中识别到00后便抛去其后的字符。
通常使用%00或16进制0x00来截断。

服务器解析漏洞

iis5.x-6.x版本,默认不解析;号后面的内容,因此test.asp;.jpg就被当成asp文件解析;

nginx,在8.03版本以下,并且配置文件中cgi.fix_pathinfo开启为1,访问www.xxx.com/shell.jpg/1.php时,nginx会将shell.jpg当做shell.php进行解析(其中1.php是一个随意构造的不存在的文件)。

结合文件包含绕过

制作图片马,利用文件包含的漏洞来执行,将webshell和图片合二为一。
copy x.jpg/b + shell.php/a shell.jpg

检验上传文件内容

超大内容绕过

有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验。

二次渲染绕过

二次渲染指的是服务器对上传的文件进行重塑,会改变原有内容,上传失败。这种情况就需要比较上传前和上传后的文件16进制数据的差异,在上传前后均没有变化的数据位置加入恶意代码。

先用开源代码生成一个1.png 文件,上传这个文件,被二次渲染并且改名为新的18233.png。直接通过文件包含访问/include.php?file=upload/18233.png&0=assert 执行成功。

<think>好的,我现在需要整理一份关于文件上传白名单绕过方法的汇总。首先,我应该回顾一下常见的文件上传漏洞及其防御机制,特别是白名单验证的原理。用户可能已经了解基础的黑名单绕过方法,但白名单通常更安全,所以需要深入探讨如何绕过白名单。 首先,白名单验证通常基于文件扩展名,只允许特定类型如.jpg、.png等。但攻击者可能会尝试修改扩展名,比如使用大小写混合,比如.PHp,或者添加特殊后缀如.php.jpg。过现代服务器通常对大小写敏感,这种方法可能太有效,但需要确认。 接下来,考虑文件名中的特殊字符。例如,在Apache中,如果上传.php.xxxx,服务器可能因为无法识别最后一个后缀而回退到.php。或者利用截断,比如%00截断,但PHP版本升级后可能修复了这个问题,需要具体情况分析。 然后是MIME类型验证绕过。虽然白名单检查扩展名,但有些应用同时检查Content-Type,比如image/jpeg。攻击者可以修改上传请求中的MIME类型,但这可能足以绕过双重检查。 文件内容验证也是一个点。例如,图片马,将恶意代码附加到图片中,利用服务器端的解析漏洞。或者利用Exif信息注入PHP代码,但需要服务器有相应的解析漏洞。 路径或文件名解析漏洞。比如上传的文件名为test.jpg.php,某些服务器可能解析PHP。或者在IIS中,分号后的内容被忽略,如test.asp;.jpg可能被当作asp执行。 此外,还有.htaccess或web.config文件的上传,如果允许覆盖服务器配置,攻击者可能执行任意文件类型。但白名单通常允许上传这些配置文件,所以可能性较低,但需要检查是否存在配置错误。 还有利用双扩展名,比如test.php.jpg,依赖于服务器解析方式。或者使用罕见扩展名,如.pHp5、.phtml等,如果服务器配置为执行这些扩展名。 另外,考虑上传的文件被重命名时的竞争条件,但白名单通常重命名会保留原扩展名,可能太适用。 需要收集实际案例和具体服务器的特性,比如Apache、IIS、Nginx的解析方式。例如,Nginx可能将test.jpg/.php解析php执行,如果配置当。 最后,总结这些方法,并提醒防御措施,如严格检查扩展名、使用随机文件名、禁用危险功能等。同时强调组合验证的重要性,如扩展名、MIME、文件头、内容扫描等。</think>### 文件上传白名单绕过方法汇总 文件上传白名单机制通过**仅允许指定扩展名**(如 `.jpg`, `.png`)来防御攻击,但攻击者仍可能通过以下方式绕过: --- #### 一、扩展名伪造类 1. **大小写混淆** - 例:上传 `.PhP` 或 `.Jsp`,若服务端未统一转为小写,可能绕过检查。 - 防御:强制转为小写后校验。 2. **多重扩展名** - 例:`shell.php.jpg`,利用部分解析漏洞(如 Apache 优先解析最后一个有效后缀)。 - 防御:仅取最后一个扩展名校验。 3. **特殊字符截断** - 例:`shell.php%00.jpg`(需 PHP <5.3.4),利用空字节截断文件名。 - 防御:过滤 `%00` 等非法字符。 --- #### 二、解析漏洞类 1. **服务器解析特性** - **Apache**:上传 `shell.php.xxx`,若 `.xxx` 未被识别,可能解析为 `.php`。 - **IIS**:`shell.asp;.jpg` 可能被解析为 `.asp`(分号截断特性)。 - **Nginx**:路径 `/test.jpg/.php` 可能触发 PHP 解析(错误配置时)。 2. **文件包含漏洞组合利用** - 上传图片马(如 `shell.jpg` 含 PHP 代码),通过文件包含漏洞(如 `include($_GET['file'])`)执行。 --- #### 三、内容欺骗类 1. **文件头伪造** - 在恶意脚本前添加图片头(如 `GIF89a`),绕过文件内容检测。 - 例:`GIF89a<?php system($_GET['cmd']); ?>` 2. **Exif 注入** - 修改图片的 Exif 信息插入 PHP 代码,需服务器存在解析漏洞。 --- #### 四、配置攻击类 1. **上传 `.htaccess` 或 `web.config`** - 若允许上传配置文件,可修改规则使任意文件解析为脚本。 - 例(.htaccess): ```apache AddType application/x-httpd-php .jpg ``` --- #### 五、其他技巧 1. **超长文件名绕过** - 部分系统截断超长文件名时可能保留恶意扩展名。 2. **竞争条件攻击** - 上传临时文件后,在删除前快速访问执行。 --- ### 防御建议 1. **严格校验扩展名**:使用白名单且强制小写。 2. **重命名文件**:生成随机文件名(如 UUID)。 3. **内容检查**:校验文件头、MIME 类型及内容合法性。 4. **禁用危险函数**:如 `putenv()`、`system()`。 5. **隔离存储**:将上传文件存放在非 Web 目录。 --- 通过组合多种验证机制(扩展名 + 内容 + 重命名)可大幅提升安全性。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值