Web应用防火墙(WAF)在保护网站安全方面发挥着至关重要的作用,尤其是在防范文件上传漏洞方面。然而,攻击者不断演进其技术,试图绕过WAF的检测。本文将深入探讨文件上传绕过WAF的最新方法和技巧,重点关注雷池、宝塔和安全狗等主流WAF产品,旨在为安全研究人员和开发者提供有价值的参考,以更好地理解和应对这些挑战。请注意,本文内容仅供学习和研究,严禁用于非法用途。
WAF文件上传防护机制概述
WAF在文件上传防护中,通常会从以下几个方面进行检测和拦截:
- 文件类型检测: WAF会检查上传文件的MIME类型(Content-Type)和文件扩展名,判断是否为可执行文件或恶意文件类型。例如,阻止上传
.php、.jsp、.asp等脚本文件。 - 文件内容检测: WAF会对上传文件的内容进行深度分析,通过特征码匹配、沙箱分析等方式,检测文件中是否包含恶意代码(如WebShell特征码)。
- 文件名检测: WAF会检查文件名是否包含特殊字符、双扩展名等异常情况,以防止攻击者通过文件名混淆绕过检测。
- 请求包结构检测: WAF会分析HTTP请求包的结构,特别是
multipart/form-data部分的Content-Disposition和boundary等字段,确保其符合HTTP协议规范,防止畸形请求绕过。 - 目录权限检测: 部分WAF或服务器安全配置会限制特定目录的写入权限或执行权限,防止恶意文件被上传到敏感目录或被执行。
理解这些防护机制是绕过WAF的基础,攻击者往往会针对这些检测点进行各种变形和混淆,以达到绕过的目的。
通用文件上传WAF绕过技巧
1. 文件名与扩展名绕过
-
替换文件扩展名: WAF通常会维护一个黑名单或白名单来限制文件上传的类型。攻击者可以尝试将恶意文件的扩展名替换为WAF允许的、但服务器端可能存在解析漏洞的扩展名。例如,将
.php文件改为.phtml、.php3、.php4、.php5、.phpt、.jspx、.asp、.asa、.cer、.cdx等。此外,还可以尝试大小写混淆,如将.php改为.PHP,因为某些WAF可能对大小写不敏感或规则不完善。 -
双扩展名: 某些服务器在处理文件时,会从右向左解析文件扩展名,直到遇到一个它能识别的扩展名。如果WAF只检查第一个扩展名,攻击者可以利用此特性。例如,上传
shell.php.jpg,如果服务器解析.jpg失败,可能会继续解析.php。 -
特殊字符绕过: 在文件名中插入特殊字符,如
%00(空字节)、换行符(%0a、%0d)、分号(;)等,可能导致WAF或服务器解析文件名时出现差异。例如,shell.php%00.jpg在某些环境下,%00后面的内容会被截断,从而将文件保存为shell.php。
2. 请求包畸形构造
-
Content-Disposition畸形: WAF通过解析HTTP请求中的
Content-Disposition头部来获取文件名和表单字段信息。通过对该头部进行畸形构造,可以干扰WAF的正常解析。- 三重等号:
filename===muma.php。一些WAF可能无法正确处理多个等号的情况。 - 换行符插入: 在
filename或name字段中插入换行符(如%0a、%0d),例如filename="shell.php%0a.jpg"。这可能导致WAF无法识别完整的文件名。 - 引号变换: 灵活使用单引号、双引号或不使用引号,甚至去除末尾引号,例如
filename=shell.php或filename='shell.php。WAF可能对引号的处理不一致。 - 多个分号: 在
filename前添加多个分号,如filename=;;;shell.php,可能导致WAF解析错误。 - 多个等号: 在
Content-Disposition字段中使用多个等号,如name===="file_x"; filename===="test.php"。 - 变换Content-Disposition值: WAF可能期望
Content-Disposition的值严格为form-data。尝试使用大小写混淆(fOrM-DaTA)、插入特殊字符(
- 三重等号:

最低0.47元/天 解锁文章
7749

被折叠的 条评论
为什么被折叠?



