干货|基于HTTP协议的WAF绕过技巧

渗透技巧 2年前 (2021) admin
1,202 0 0

来源:同程旅行安全应急响应中心

在实际攻击场景中,攻击者在进行web漏洞攻击时常常会碰到WAF(网站应用级入侵防御系统)的阻拦,为了测试绕过WAF的防御,安全人员也研究了各种各样的姿势。本文就针对基于HTTP协议的WAF绕过思路进行了梳理。



0

WAF简介

  

    Web应用防护系统称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。        

    WAF可以算是代理防火墙中的一种,可以拆包解包检查;    


    本文的WAF bypass 指的是针对WAF防护策略的绕过技术原理分析。



1

为什么能绕过WAF


01. 鱼(安全)和熊掌(性能)不可兼得;

02. 花瓶or摆设(甲方买了只是应付检查,不用或者说是不敢用)

03. WAF本身不能贴合业务(通用性牺牲了某些语言、中间件、数据库的特性)04. 确实有BUG;



2

为什么要绕过WAF


    WAF能解决所有外部应用安全问题吗?答案肯定是不行的。

    WAF更像是兜底设备,应用安全问题不能全部依赖waf去解决,不然waf一旦被突破,那意味着后门大开,黑客可以长驱直入。所以只有对waf进行绕过检测,才能发现到底有没有问题。



3

常规WAF绕过方式


        这里以文件上传为例,直观展示 :

干货|基于HTTP协议的WAF绕过技巧


3.1 快速判断文件上传漏洞是否客观存在

(PS:最基础的就是文件上传后,要有明确的返回地址,要不然就算是上传webshell成功了,也不知道去哪里访问连接。)

01.我们直接前端上传正常文件,burp截断数据包后,尝试修改content-type和任意后缀,来判断黑白名单(eg:1.abc,随机后缀传上去了一般就是黑名单限制)


02.随机后缀传不上去一般就是白名单,检查是否是前端JS限制,F12看一下,如果是前端限制,可以直接修改js。


03.非前端白名单限制的话,只能尝试服务器和中间件的解析漏洞了。


3.2 判断程序本身限制与WAF限制


01.程序本身黑名单限制:响应通常会有上传文件格式不允许的字样。


02.WAF限制:返回页面通常会是302跳转WAF的拦截页面或是该次请求被重置reset无响应包。



3.3 常规绕过WAF限制

    遇见的常见的WAF,在上传阶段检测的字段通常是:

    Content-Disposition: form-data; name=”file”; filename=”1.php”

    针对后缀类绕过的方法:构造当前能识别的正常文件的畸形包(.png),然后再改后缀,服务器能解析,但是让WAF不认识。


    这些WAF都能在后缀落地的阶段绕过,各种WAF可能对后缀判断的具体的位置不同:

    例如某WAF:filename参数去掉引号就可以正常上传,原因是waf未识别到双引号“”内的黑名单文件,但服务器可以忽略进行正常接收解析。

干货|基于HTTP协议的WAF绕过技巧


绕过方式


“enter”

换行

filename===”1.jsp”

多等号

%00

文件名截断

1;.jsp

解析绕过

1′.jsp

解析绕过


    有些WAF可能会阻止某些路径(upload)下访问脚本文件,可以使用白名单文件目录+脚本访问的方式。



4

基于HTTP协议的绕过方式


4.1 HTTP隧道传输/ HTTP pipeline

    通过使用 Connection: keep-alive 达到一次传输多个http包的效果;

干货|基于HTTP协议的WAF绕过技巧

    设置两个request的Connection: keep-alive,Content-Length分别对应数据长度,发现返回未被拦截的两个response:

干货|基于HTTP协议的WAF绕过技巧


4.2 分块传输/ Chunked Transfer (HTTP 1.1)

    通过在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用0独占一行表示结束。

目的:达到敏感参数分割效果

    没有分块时,传入敏感参数,被waf拦截:

干货|基于HTTP协议的WAF绕过技巧

    使用chunked分块传输后,waf未拦截:

干货|基于HTTP协议的WAF绕过技巧

4.3 ibm037编码/ Charset = xxx编码绕过

    利用不常见的特殊编码,绕过waf检测。


ibmxxx编码在以下服务或语言中可被解析识别
Nginx, uWSGl-Django-Python2 & 3
Apache-TOMCAT7/8- JVM1.6/1.8-JSP
Apache- PHP5 (mod_ php & FastCGI)
IIS (6, 7.5, 8, 10) on ASP Classic, ASP.NET and PHP7.1- FastCGI

干货|基于HTTP协议的WAF绕过技巧



4.4  HTTP协议未覆盖

    Content-type: multipart/form-date 为什么存在?是为了满足能够既传参数又能传文件的场景;

①利用 Content-type: multipart/form-date 绕过上传的边界(boundary)限制。

通过多boundary定义,使waf检测范围和实际上传范围不一致,从而绕过waf上传恶意内容:干货|基于HTTP协议的WAF绕过技巧

②上传参数“file”,绕过waf检测“filename”

4.5 Chunked+协议未覆盖

    利用 Content-type: multipart/form-date + Chunked编码绕过WAF检测限制。



5

其他方式


5.1 高并发(大力出奇迹)

    使用自动化工具短时间内发送大量攻击数据包。

    缺点:动静太大,容易被业务察觉并封禁;

干货|基于HTTP协议的WAF绕过技巧

5.2 垃圾数据

    用多参数或者无效数据填充请求,超出WAF的检测限制范围,从而绕过防御;

干货|基于HTTP协议的WAF绕过技巧



6

总结


    以上的几种就是常见的基于HTTP协议原理的WAF绕过方法,而在实际的攻击场景中攻击者的还有更多的攻击思路和手法。没有绝对的安全设备,也没有绝对的安全防御,对抗强度是在呈螺旋式升级的。当我们每新增一条安全规则和策略时,要去深入的思考是否存在其他纰漏,需要我们在对抗中去不断的升级与完善。

干货|基于HTTP协议的WAF绕过技巧

1. 常见内网穿透工具使用总结

2. 实战|记一次HVV实战应急响应

3. 实战|记一次授权的渗透测试

4. 实战|记一次红蓝攻防演练

推荐阅读

干货|基于HTTP协议的WAF绕过技巧

点个赞、在看、分享

原文始发于微信公众号(乌雲安全):干货|基于HTTP协议的WAF绕过技巧

版权声明:admin 发表于 2021年11月21日 上午12:30。
转载请注明:干货|基于HTTP协议的WAF绕过技巧 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...