|
|
|
联系客服020-83701501

WAF攻防研究之四个层次Bypass WAF

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
WAF攻防研讨之四个档次Bypass WAF ? ? 从架构、利润、协媾和规则4个档次研讨绕过WAF的技术,助于全方位抬举WAF防御才力。

????绕过WAF的关连技术研讨是WAF攻防研讨极端重要的一部门,也是最乏味的部门,所以我在写WAF攻防时先写进攻部门。还是那句老话“不知攻焉知防”,若是连绕过WAF办法都不晓得,怎么样包管WAF能体贴后端办事的安全。在我眼里,WAF的绕过技术的研讨将不息驱动防御水平进步。

曩昔一些WAF bypass的文章更像CASE的整顿,都把核心放在了规则对抗层面。绕过WAF规则,更像是正面对抗,属于上策。不绝关注规则层面的绕过,太畛域视野,看不到WAF在别的方面标题。木桶事理,防御才力并不会有实质的进步。本文将从4个档次教学bypass WAF的技术,全方位抬举WAF的防御才力。 讲完关连进攻技术后,当前再探讨WAF的企图架构、防御战略,这样显得每一处的思忖都是成心义的。

  • 从架构层Bypass WAF 。
  • 从利润限角度bypass WAF。
  • 从协定层面bypass WAF。
  • 从规则害处bypass WAF。

1. 架构层绕过WAF

1.1 ?计议源站

若是流量都没有经过WAF,WAF尽管无奈阻拦进攻乞求。当前少数云WAF架构,好比百度云加快、360安全卫士等,经过革新DNS分析,把流量引入WAF集群,流量经过检测后转发乞求到源站。如图,liusscs.com接入接入WAF后,liusscs.comd的DNS分析了局指向WAF集群,用户的乞求将发送给WAF集群,WAF集群经过检测以为非进攻乞求再转发给源站。

WAF攻防研究之四个层次Bypass WAF

云WAF流量阶梯

????若是我们是进攻者,如何绕过WAF的安全检测呢? 从云WAF架构思忖,若是HTTP乞求都没有经过WAF集群直接到达源站,瓜熟蒂落bypass WAF。所以要害在于发明源站的IP地点。常用办法以下,梗概还有很多很多思绪,迎接赔偿:

1) ? 音讯透露发明源站IP。音讯透露的路径很多,细心留言每每能发明。我常用的办法以下:

  • web页面注销能否网罗源站IP。
  • GIHUB源代码透露能否网罗源站IP。
  • 未接入WAF前,实在IP地点能否被搜索引擎等办事收录。

2) ? 穷举IP地点,依照特色发明办事器实在IP地点。关于国际的办事器,穷举国际的IP,会见每一个IP的HTTP办事,依照页面特色检测响应页面,武断IP能否为源站IP地点。已经乌云有人分享过,实现一次国际IP扫描只须要8-9小时,但是当初找不到那篇文章。

1.2 ?独霸同网段

一些在云办事商的web,同时独霸云办事商供给的WAF办事。当流量不是经过DNS分析引流到WAF,流量必须经过WAF的检测,这是不能经过发行源站进行绕过。可以思忖在云办事商买一台VPS,经过VPS进攻方针web,因为流量是局域网,梗概不经过WAF检测,实现绕过。能不能败北,要害在于云办事商的Internet配置。

WAF攻防研究之四个层次Bypass WAF

进攻板滞与方针板滞在对抗局域网

1.3 独霸边疆裂痕

若是未能发明源站IP,可以尝试计议子站的SSRF裂痕。若是子站会见方针站不经过WAF集群,可以独霸SSRF裂痕来绕过WAF。

2. 利润限定角度绕过WAF

这是妇孺皆知、而又难以管理的标题。若是HTTP乞求POST BODY太大,检测部门的内容,WAF集群耗费太大的CPU、内存利润。是以许多WAF只检测前面的几K字节、1M、或2M。关于进攻者而然,只须要在POST BODY前面添加许多无用数据,把进攻payload放在末了即可绕过WAF检测。

3. 协定层面绕过WAF的检测

即使流量都确保经过WAF,若是WAF的防御战略根本就没有检测payload,那么也就可以绕过WAF。协定层面绕过WAF,独霸WAF分析协定的标题,使得payload被以为不是乞求的HTTP乞求的内容。从个人经验总结出WAF分析协定的常泛起标题的三个标的目标。

  • 协定掩饰笼罩不全。
  • 协定分析不粗略。
  • 协定分析与后WEB容器的协定分析不差别。

以下以实例阐明独霸协定绕过WAF的办法。经过CASE分析什么是协定掩饰笼罩不全、协定分析不粗略、协定分析不差别。

3.1 协定未掩饰笼罩绕过WAF

POST 乞求常用有2种参数提交行动:

  • ????Content-Type: application/x-www-form-urlencoded;
  • ????Content-Type: multipart/form-data;

Waf未能掩饰笼罩Content-Type: multipart/form-data从而导致被绕过。大概WAF会以为它是文件上传乞求,从而只检测文件上传,导致被绕过。如图,加欢愉的WAF就具有被绕过的环境,是模范的协定未掩饰笼罩。

3

泛泛进攻乞求被阻拦

4

协定未掩饰笼罩导致绕过

3.2 独霸协定分析不差别绕过WAF的模榜样子容貌

曩昔发的文章《PHP DOS裂痕的新独霸》,就是独霸协定分析不差别进行绕过WAF。如图中的payload,WAF分析出来上传的文件名是test3.jpg,而PHP分析得到的文件名是shell.php,从而绕过WAF的防御。那时这个办法的确通杀部门WAF,可见独霸协定层绕过WAF的才略,概况见:http://weibo.com/ttarticle/p/show?id=2309404002575157473609。就文件上传而言,还有更多因为协定分析导致绕过,见3.3节。

5

WAF与PHP分析文件上传协定不差别导致绕过

3.3 ?独霸协定分析标题绕过WAF文件上传

WAF的文件上传规则独霸正则批注式成亲上传的文件名能否网罗“0x00”等,所以正面绕过正则批注式成亲的确不成能。若是不从规则角度思忖,独霸协定分析标题让WAF无奈成亲到粗略的文件名,就可以绕过WAF实现文件上传。

3.3.1 协定分析不粗略-文件名掩饰笼罩(一)

在multipart协定中,一个文件上传块具有多个Content-Disposition,将以末了一个Content-Disposition的filename值作为上传的文件名。许多WAF分析到第一个Content-Disposition就以为协定分析完结,得到上传的文件名,从而导致被绕过。如图,加欢愉的WAF分析得到文件名是”sp.pho”,但PHP分析了局是”sp.php”,导致被绕过。

6

3.3.2 协定分析不粗略-文件名掩饰笼罩(二)

在一个Content-Disposition 中,具有多个filename ,协定分析应当独霸末了的filename值作为文件名。若是WAF分析到filename=”p3.txt”以为分析到文件名,完结分析,将导致被绕过。因为后端容器分析到的文件名是t3.jsp。

Content-Disposition: form-data;name=”myfile”; filename=”p3.txt”;filename=”t3.jsp”

3.3.3 协定分析不粗略-遗漏文件名

当WAF遇到“name=”myfile”;;”时,以为没有分析到filename。而后端容器继续分析到的文件名是t3.jsp,导致WAF被绕过。

Content-Disposition: form-data;name=”myfile”;; filename=”t3.jsp”。

3.3.4 协定分析不粗略-未分析部门文件

multipart协定中,一个POST乞求可以同时上传多个文件。如图,许多WAF只搜查第一个上传文件,没有搜查上传的部门文件,而实践后端容器会分析部门上传的文件名,进攻者只要把paylaod放在后面的文件PART,即可绕过。

7

8

3.3.5 协定分析不差别-文件名分析兼容性

multipart协定中,文件名的形式为“filename=”abc.php””。但是Tomcat、PHP等容器分析协定时会做一些兼容,能粗略分析 ”filename=”abc.php”、”filename=abc.php”、 ”filename=’abc.php’”。而WAF只按照协定规范去分析,无奈分析文件名,但是后端容器能粗略得到文件名,从而导致被绕过。场景的绕过形式:

  • Content-Disposition: form-data; name=”file”; filename=abc.php
  • Content-Disposition: form-data; name=”file”; filename=”abc.php
  • Content-Disposition: form-data; name=”file”; filename=’abc.php’

3.4 ? ?参数传染

乞求中网罗2个参数名类似的参数typeid,第一个是正常参数的值正常,第二个参数才是payload。若是WAF分析参数独霸第一个值,没搜查第二个值,将导致绕过。这是良久很久的一个CASE,当初的确没有WAF具有这个标题。

/forum.php? typeid=644&typeid=if(now()%3dsysdate()%2csleep(19.844)%2c0)/*’XOR(if(now()%3dsysdate()%2csleep(19.844)%2c0))OR’%22XOR(if(now()%3dsysdate()%2csleep(19.844)%2c0))OR%22*/

3.5 小结

当想到独霸协定分析绕过WAF检测时,并不敢注定效果,经过实际检验,协定分析绕过WAF的思绪可行且有用。在研讨独霸协定绕过WAF时,须要英勇地展望WAF分析协定时容易犯什么舛错,迷信地一点点验证。经过解析PHP、tomcat的协定分析源码,找出它们与HTTP规范协定的差别是发明绕过WAF的快捷有用办法。

本节独霸multipart/form-data协定分析过标题文件上传的思绪,思绪异样可用于绕过multipart/form-data协定POST FROM表单提交参数的检测。

4. 规则层面的绕过

对基于正则批注式的WAF,绕过WAF规则主要考虑安全工程师写WAF规则时在想什么,容易忽略什么,推测一些梗概绕过的行动,此后多次尝试进行验证。比起残破列举绕过CASE,我更恋爱解析绕过思绪。这次以最受关注的SQL注入、文件网罗为例,解析一下绕过思绪。

4.1. SQL注入绕过

绕过SQL注入规则主要独霸WAF规则本人的标题、未思忖到SQL语法变形、及后端数据库SQL语句语法赋性。差别的数据库虽然服从SQL规范,但是集认识参预特有的语法。WAF的防御战略要分身种种数据库的特殊语法,容易遗漏,从而被独霸绕过WAF。以下MySQL为例,解析绕过SQL注入的一些思绪。

4.1.1?? 注释符绕过

/*xxx*/是注释,也可以充当空缺符。因为 /**/可以使得MySQL对sql语句(union/**/select)词法分析败北。终究上许多WAF都思忖到/**/可以作为空缺分,但是waf检测 “/\*.*\*/”很耗费苦守,工程师会折中,梗概在检测中间引入一些特殊字符,好比:/*\w+*/。大概,WAF梗概只中间搜查n个字符“/\*.{,n}\*/”。依照以上想法主意,可以渐渐测试绕过办法:

  • 先测试最根本的:union/**/select
  • 再测试中间引入特殊字:union/*aaaa%01bbs*/select
  • 末了测试注释长度:union/*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/select

同理,关于/*!xxx*/,可以采取类似的思绪绕过WAF。

4.1.2?? 空缺符绕过

基于正则批注式的WAF, SQL注入规则独霸正则批注式的“\s”成亲空格,好比”select\s+union”。独霸正则批注式的空缺符与MySQL空缺符的差别可绕过WAF规则。如何这些MySQL的赋性?经过fuzz,每次革新正常SQL语句的某部门,革新为别的字符,武断语法能否粗略,即可武断出来MySQL语法赋性。尽管,也可以经过解析MySQL词法来发明语法赋性,从而找到绕过办法。

独霸空缺符进行绕过,测试WAF时尽梗概增加别的缘由的影响,好比”union select”被阻拦,只要把中间空缺符革新为”%250C”, “%25A0”进行绕过测试。

  • union%250Cselect
  • union%25A0select

4.1.3 函数分开符

对基于正则批注式的WAF,我们展望安全工程师写WAF规则时,梗概不晓得函数名与左括号之间可以具有特殊字符,大概遗漏可以具有特殊字符。好比成亲函数”concat()”的规则写法,“concat(”大概”concat\s*(”,就没有思忖到一些特殊字符。相应的绕过办法,在特殊地位引入特殊的分开符,一一测试。这些特殊分开符发明也是经过Fuzz出来的。

  • concat%2520(
  • concat/**/(
  • concat%250c(
  • concat%25a0(

死记硬背,计议类似的要害地位,Fuzz特殊字符,发明更多的绕过新办法。展望工程师们写规则因为种种缘由容易遗漏的点,进行绕过WAF检测。

4.1.4?? 浮点数词法分析

独霸MySQL分析浮点数的本色,正则批注式无奈成亲出单词union,但是MySQL词法分析败北分析出浮点数、sql要害字union。

  • select * from users where id=8E0union select 1,2,3,4,5,6,7,8,9,0
  • select * from users where id=8.0union select 1,2,3,4,5,6,7,8,9,0
  • select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9,0

4.1.5?? 独霸error-based进行SQL注入

Error-based的SQL注入函数极端容易被忽略,导致WAF规则过滤不残破。随着对MySQL研讨越来越深,被发明可用于error-based SQL注入的函数越来越多,同时也给绕过WAF培养了更多机会。常见的函数:

  • extractvalue(1, concat(0x5c,md5(3)));
  • updatexml(1, concat(0x5d,md5(3)),1);
  • GeometryCollection((select*from(select*from(select@@version)f)x))
  • polygon((select*from(select name_const(version(),1))x))
  • linestring()
  • multipoint()
  • multilinestring()
  • multipolygon()

独霸Error-based的SQL注入函数进行绕过时,可以群集函数分开符,或别的办法灵敏应用。

4.1.6?? Mysql特殊语法

最有用的发明材干,还是去读读MySQL词法解析源代码。和协定绕过类似,发掘SQL规范与MySQL的词法解析差别是发明WAF SQL注入绕过的有用材干。以下是MySQL语法的一个特写(ps:不是我发明的):

select{x table_name}from{x information_schema.tables};

4.1.7 剖析独霸实例

以上都是SQL注入绕过中的技术点,在实践浸透测试中,须要灵敏剖析独霸手段到达残破绕过,读取数据数据。以下给出残破绕过WAF SQ注入检测的实例。如图,本例中剖析多个绕过技术点,终极实现残破绕过实现读取数据。

  • 独霸浮点数词法分析,绕过union select 的检测。
  • 异样,函数分开符思维集和浮点数词法分析,绕过要害字from的检测。
  • 末了空缺分分割绕过INFORMATION_SCHEMA.TABLES的搜查

9

10

4.2. 文件网罗

文件网罗分为相对阶梯、相对阶梯文件网罗。在相对阶梯文件网罗中,终极依照Linux假造文件琐屑(vfs)的规则查找文件,经过解析vfs的文件阶梯分析规则,提取其中规则本色,用这些本色去绕过WAF。在相对文件阶梯网罗中,主若是依照进攻场景,WAF未过滤一些协定、未过滤某些特殊阶梯。

4.2.1????????? 相对阶梯的绕过

写WAF文件网罗规则时,若是检测繁多的”../”,误报会极端多,所以WAF文件网罗规则集认识检测间断的“../”。依照vfs分析阶梯的语法,分析到“//”文件阶梯坚决,分析到“/./”文件阶梯仍然。 经过防备贯注间断的”../”,从而绕过WAF文件网罗规则。Eg: ././..///./.././/../etc//passwd,它等价于../../../etc/passwd。如图,一个实践的绕过WAF文件网罗的 CASE

11

12

4.2.2?相对阶梯的绕过(一)

  • WAF没有思忖到阶梯中拔出“/./”、“//”关于vfs分析阶梯是等价的,导致可被绕过。好比 /etc/./passwd 与 /etc/passwd 是等价的。还可以经过组合“/./”、“//”进行绕过,eg. /etc///.//././/passwd。

13

14

  • 关于相对阶梯文件网罗,WAF一般会阻拦常见阶梯,而不会防御部门的相对阶梯。是以,在浸透测试中,可以网罗别的的阶梯下一些文件,好比/usr/local/nginx/conf/nginx.conf。

15

16

 

  • 若是WAF只检测间断的../,搜查最先阶梯为Linux的目次名,可以采取/wtt/../绕过WAF文件网罗检测。 好比,“/wtt/../etc/passwd”, wtt不是Linux规范目次,不会被规则成亲。WAF只检测间断的../,但是只独霸一个../,不被阻拦。终极读取/etc/passwd文件。

4.2.2?相对阶梯的绕过(二)

独霸WAF未检测的协定。PHP 文件网罗反对的协定,在浸透测试中,看情况选择可行的办法

  • file:// — Accessing local filesystem
  • http:// — Accessing HTTP(s) URLs
  • ftp:// — Accessing FTP(s) URLs
  • php:// — Accessing various I/O streams
  • zlib:// — Compression Streams?data:// — Data (RFC 2397)
  • glob:// — Find pathnames matching pattern
  • phar:// — PHP Archive
  • ssh2:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — Audio streams
  • expect:// — Process Interaction Streams

5.???? 总结

一个好WAF不是吹出来的,是实际检验出来的。研讨WAF的绕过材干,是为了更好的抬举WAF的防御才力。在研讨打破的进程中,不要仅仅停顿在正则批注式,根本裂痕事理,须要对波及并深刻更多的畛域,好比HTTP协定熟谙和PHP、Tomcat对HTTP协定源码解析,MySQL词法解析,和Fuzz的思绪等。在此进程中,会有许多兴味,也会有各方面才力的抬举。

[via@破-见 ]

数安新闻+更多

证书相关+更多