了解WAF(Web应用防火墙)如何被绕过,确实能帮助我们更立体地思考防御策略。下面这个表格汇总了XSS和文件上传漏洞的常见WAF绕过技术核心逻辑,帮你快速建立整体认知。
| 漏洞类型 | WAF检测逻辑 | 核心绕过思路 | 代表性技术举例 |
|---|---|---|---|
| **XSS(跨站脚本)** | 关键字匹配(如script, onload)、正则表达式、上下文语义分析 |
变形、混淆、利用解析差异 | 编码混淆、标签与事件处理器替换、参数污染 |
| 文件上传 | 检查文件扩展名、MIME类型、文件内容、文件结构 | 欺骗检测逻辑、利用解析差异 | 文件头伪造、解析漏洞利用、竞争条件攻击 |
💡 XSS漏洞的WAF绕过详解
XSS绕过的核心在于让恶意载荷"看起来不像"攻击代码。
-
多种编码与混淆技术
-
Base64编码 :将完整的JavaScript代码进行Base64编码,然后通过
eval(atob('编码后的字符串'))等方式执行。这能有效隐藏原始载荷的关键字。 -
URL编码与Unicode编码 :对载荷中的特殊字符或整个关键字进行编码,例如将
<编码为%3C,或将alert编码为\u0061\u006c\u0065\u0072\u0074,以绕过简单的字符串匹配。 -
注释与分割 :在关键字中插入注释或将其分割成多个部分,利用JavaScript的语法灵活性绕过检测。例如,
al/*任意内容*/ert(1)或通过字符串拼接a='al';b='ert';eval(a+b+'()')。
-
-
替换攻击向量与标签
WAF的规则库可能主要针对常见的标签(如
<script>)。通过使用非标准或生僻的HTML标签和事件属性 ,可以大大提高绕过成功率。例如,使用<svg onload=alert(1)>、<body onload=alert(1)>或<details open ontoggle=alert(1)>等。 -
利用协议与解析差异
-
参数污染 :这是一种较新的高级技术。通过向同一个参数名提交多个值(例如
/?q=1'&q=alert(1)&q='2),利用WAF与后端Web框架(如ASP.NET)在参数解析时的差异,使后端将多个值拼接成一个有效的XSS载荷,而WAF可能只检查了其中一个无害的值。 -
伪协议 :在支持JavaScript执行的环境中使用伪协议,如
<a href="javascript:alert(1)">Click</a>。
-
📤 文件上传漏洞的WAF绕过详解
文件上传绕过技术旨在让一个恶意文件在各个环节的检测中都被认为是合法的。
-
修改文件本身属性
-
伪造文件头(Magic Number) :在每个文件的开头,都有特定的几个字节来标识文件类型,如GIF文件的
GIF89a。可以在WebShell代码前添加合法的图片文件头,尝试绕过基于文件头的检测。 -
制作图片木马(Image Webshell) :将WebShell代码嵌入到一个真实的图片文件中。使用命令行工具如
copy /b image.jpg + shell.php webshell.jpg。这种方法可能绕过简单的文件内容扫描,但要成功执行代码,通常需要配合服务器解析漏洞。
-
-
操纵HTTP请求
-
修改Content-Type :拦截上传请求,将
Content-Type从application/octet-stream修改为白名单内的类型,如image/jpeg,以欺骗服务器的MIME类型检测。 -
文件名混淆 :使用多种技巧对文件名进行混淆,例如:大小写混合(
pHp.InFo)、特殊字符(如空格、点号shell.php.,Windows系统会自动去除)、在Apache中利用多后缀解析(shell.php.jpg可能被解析为PHP文件)等。
-
-
利用服务器解析漏洞
这是文件上传漏洞利用中威力巨大的技术,因为它能让一个看似无害的文件扩展名被当作脚本来执行。
-
IIS解析漏洞 :例如,在IIS 6.0中,
shell.asp;.jpg会被当作ASP文件执行;在名为shell.asp的目录下的所有文件都会被当作ASP解析。 -
Apache解析漏洞 :如果配置不当(如
AddHandler指令),文件shell.php.abc可能会因为.abc不被识别,而被从左向右解析为PHP文件。 -
Nginx解析漏洞 :在特定配置下(
cgi.fix_pathinfo=1),访问http://site.com/shell.jpg/notexist.php,Nginx可能会将shell.jpg作为PHP文件提交给解析器。
-
🛡️ 防御视角与最佳实践
理解攻击是为了更好的防御。从防御者角度看,构建有效的防护需要多层策略:
-
输入验证与输出编码 :坚持使用白名单机制进行输入验证,并对所有用户输入的输出进行严格的上下文相关编码(HTML编码、JavaScript编码等)。
-
深度解码与规范化:WAF或后端代码应对输入进行深度解码(如多次URL解码、Base64解码),直到最原始的形式,再进行校验。
-
最小权限原则:为Web服务器目录设置严格的权限,上传目录应设置为不可执行。
-
定期更新与安全配置:及时更新Web服务器、中间件和应用程序框架,修复已知的解析漏洞,并进行安全配置审计。
-
纵深防御:不要仅仅依赖WAF。结合安全编码、漏洞扫描、入侵检测系统(IDS)等构建纵深防御体系