[DVWA] Command Injection

命令注入(Command Injection)是通過在應用中執行宿主作業系統的命令,來達到破壞目的的一種攻擊方式。如果我們的應用程式將不安全的用戶輸入傳遞給了系統命令解析器(shell),那麼命令攻擊就有可能發生。

通常來說,由應用程式傳遞作業系統命令會賦有和應用一樣的權限,所以如果沒有合理防禦機制會給系統帶來很大危害。命令注入攻擊漏洞是PHP應用程式中常見的漏洞之一。

命令注入和代碼注入不同,代碼注入的目的在於將外部代碼注入應用程式本身,並隨程序執行;命令攻擊的對象是伺服器的宿主機。DVWA的相應模塊中,有如下功能:應用提供了一個用來ping對象主機的功能。正常情況下,輸入IP位址,返回命令結果。

防禦機制:
Level Low

相關函數介紹:

php_uname() 返回了運行 PHP 的操作系統的描述。 這和 phpinfo() 最頂端上輸出的是同一個字符串。 如果僅僅要獲取操作系統的名稱。可以考慮使用常量 PHP_OS,不過要注意該常量會包含 PHP 構建built時的操作系統名。

參數
mode
mode 是單個字符,用於定義要返回什麼信息:

‘a’:此為默認。包含序列 “s n r v m” 裡的所有模式。
‘s’:操作系統名稱。例如: FreeBSD。
‘n’:主機名。例如: localhost.example.com。
‘r’:版本名稱,例如: 5.1.2-RELEASE。
‘v’:版本信息。操作系統之間有很大的不同。
‘m’:機器類型。例如:i386。

代碼白話文:輸入一組ip之後,他會去ping 4組訊息回來,並且不會檢查輸入的內容是什麼

漏洞利用:

直接在要執行的命令前面加上”;” 即可在對方的伺服器上執行命令

例如:;cat /etc/passwd (這是儲存真實密碼的地方)

Level Medium

直接看代碼,它把’&&’和’;’ 都變成了空白(過濾掉了)

這邊就使用’|’進行拼接,另外也可以使用 ‘127.0.0.1&;&cat /etc/passwd’去繞過 (&&被過濾掉之後等於剩下127.0.0.1;cat /etc/passwd)

如果說你是輸入&;&cat /etc/passwd並無法成功,原因是因為&&和&是不一樣的

&& -> command1 && command2 必須第一個指令執行”成功”才能執行第二個

& -> command1 && command2 無論第一個指令有無執行成功都會執行第二個

Level high

這邊他幾乎把所有的符號都給過濾掉了,不過仔細一看 ‘| ‘ 是有一個空白的

這邊就是我們這關可以利用的漏洞了

另外比較特別的地方是可以使用反引號來注入

127.0.0.1`|`ls,因為反引號會被過濾掉導致剩下127.0.0.1|ls

Level Impossible

第五行user_token過濾請求

第九行stripslashes過濾反斜線

第十二行explode來進行字串切割,以’.’為分隔

第十五行將切割開來的數字分別來判斷是不是數字

因此這題真的是沒有command Injection的漏洞了

0

Leave a Reply

向上滑動