本篇繼續對於安全性測試話題,結合DVWA進行研習。
Command Injection:命令注入攻擊。
1. Command Injection命令注入
命令注入是通過在應用中執行宿主操作系統的命令,來達到破壞目的的一種攻擊方式。如果我們的應用程序將不安全的用戶輸入傳遞給了系統命令解析器(shell),那么命令攻擊就有可能發生。
通常來說,由應用程序傳遞操作系統命令會賦有和應用一樣的權限,所以如果沒有合理防御機制會給系統帶來很大危害。命令注入攻擊漏洞是PHP應用程序中常見的漏洞之一。
命令注入和代碼注入不同,代碼注入的目的在於將外部代碼注入應用程序本身,並隨程序執行;命令攻擊的對象是服務器的宿主機。
DVWA的相應模塊中,有如下功能:應用提供了一個用來ping對象主機的功能。正常情況下,輸入IP地址,返回命令結果。
在DVWA最低防御級別下,嘗試進行攻擊。
由於在windows cmd和linux shell條件下,都可以通過&&來串行執行命令,我們附上dir命令執行后:
可以看到dir命令被執行,並且打印出了其結果。
如果我們用更復雜的命令附在以上命令之后,基本都可以執行,包括創建刪除文件等等,可以對宿主系統造成非常大的危害。
2. 防御機制
分別對比DVWA4個安全級別的后台核心代碼:
Low:
代碼使用shell_exec將用戶輸入執行ping命令,基本沒有任何防御。
Medium:
使用黑名單機制,替換掉如“&&”和“;”這樣的命令符號。但是這樣簡單的黑名單是很容易繞過的,比如“|”管道符就沒有屏蔽。
High:
完善了黑名單機制,篩除了更多字符,但仍有可能繞開。
Impossible:
使用白名單機制替換掉黑名單,將用戶輸入的字符串重組為數組,依次遍歷數組內元素,刪除其中所有的非數字和“.”。這樣就達到了防御命令注入的目的。