渗透测试-WAF绕过通用思路

渗透测试-WAF绕过通用思路
最新回答
老地方

2026-05-10 00:21:16

渗透测试-WAF绕过通用思路

在渗透测试中,WAF(Web应用防火墙)是一种常见的安全防护手段,用于检测和阻止对Web应用的恶意攻击。然而,攻击者往往会尝试绕过WAF,以寻找和利用潜在的漏洞。以下是一些通用的WAF绕过思路:

一、大小写变换

  • 原理:WAF通常基于关键字匹配来检测攻击行为,而大小写变换可以破坏WAF的匹配规则。
  • 方法:将攻击载荷中的关键字进行大小写混合变换,如将SELECT变为sElEcT。

二、双写关键字

  • 原理:一些WAF可能会将检测到的关键字过滤为空,双写关键字可以绕过这种过滤机制。
  • 方法:将攻击载荷中的关键字重复书写,如将UNION变为UUNIONION,WAF在过滤掉一个UNION后,剩余的载荷仍然有效。

三、编码

  • URL编码:将攻击载荷中的特殊字符进行URL编码,如将空格编码为%20。
  • Unicode编码:将攻击载荷中的字符转换为Unicode编码形式,如将A转换为u0041。
  • 十六进制编码:将攻击载荷中的字符转换为十六进制形式,并在前面加上%,如将A转换为%41。
  • 其他编码:根据WAF的解析能力,选择其他可能被WAF忽略或错误解析的编码方式。

四、注释

  • 内联注释:在SQL注入等场景中,使用内联注释(如MySQL中的/*...*/)来替换空格或其他被WAF过滤的字符。
  • 换行与注释:通过换行和注释的组合,将WAF过滤掉的部分载荷隐藏在注释中,再通过换行逃逸到注释之外。

五、垃圾字符

  • 原理:一些WAF设置了过滤的数据包长度限制,当数据包过大时,WAF为了性能考虑可能会直接略过该数据包。
  • 方法:在攻击载荷中添加大量无意义的字符(如空格、换行符等),使数据包长度超过WAF的限制。

六、分块传输

  • 原理:利用HTTP协议中的分块传输编码(Transfer-Encoding: chunked),将攻击载荷分成多个小块进行传输。
  • 方法:使用Burp Suite等工具的插件,将POST请求的数据部分改为用一系列分块来传输,每个分块包含长度值和数据,最后以0表示结束。

七、HTTP协议绕过

  • HTTP 0.9:使用只有GET方法且没有HEADER信息的HTTP 0.9协议,WAF可能无法识别这种请求包。
  • 请求方式变换:将POST请求变换为PUT、DELETE等其他请求方式,WAF对不同请求方式的处理机制可能不同。

八、参数污染(HPP)

  • 原理:在存在多个同名参数的情况下,逻辑层和WAF层可能对参数的取值不同。
  • 方法:在第一个参数中插入攻击载荷,而在第二个参数中保持正常值,组合起来绕过WAF。

九、部分中间件的处理方法

  • Pipeline(keep-alive):手动设置HTTP请求头部中的Connection字段为keep-alive,在HTTP请求报文中构造多个请求,将恶意代码隐藏在第n个请求中。
  • HTTP charset:利用编码绕过WAF,将payload转义后,由于WAF默认用UTF8编码检测,因此可以用此方法绕过关键词过滤。

十、WAF特性

  • 云WAF绕过:找到真实IP,修改本地hosts文件或直接在Burp Suite中指定解析,避免流量走到云WAF上。
  • 白名单绕过:利用WAF设立的文件或内容白名单,将测试payload伪装成白名单中的内容来绕过WAF。
  • 静态文件绕过:伪装成静态文件(如图片、CSS等)来绕过WAF的检测。
  • Content-Type绕过:通过修改HTTP请求头中的Content-Type字段,使WAF误判请求类型,从而绕过检测。

十一、解析兼容性和容器特性

  • 解析兼容性:利用WAF和WEB容器之间的解析差异,如上传文件时的文件名解析差异,来绕过WAF的检测。
  • 容器特性:通过fuzz测试所有字符,了解容器对特定字符的处理方式,从而找到绕过WAF的方法。

示例图片

综上所述,WAF绕过的方法多种多样,需要根据具体的WAF类型、版本和配置进行针对性的尝试。在渗透测试中,应综合运用多种方法,以提高绕过WAF的成功率。同时,也应注意遵守法律法规和道德规范,不得进行非法攻击和破坏行为。