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