安全性測試入門(二):Command Injection命令行注入攻擊和防護

本篇繼續對於安全性測試話題,結合DVWA進行研習。linux

Command Injection:命令注入攻擊。

 

 

1. Command Injection命令注入

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

一般來講,由應用程序傳遞操做系統命令會賦有和應用同樣的權限,因此若是沒有合理防護機制會給系統帶來很大危害。命令注入攻擊漏洞是PHP應用程序中常見的漏洞之一。windows

命令注入和代碼注入不一樣,代碼注入的目的在於將外部代碼注入應用程序自己,並隨程序執行;命令攻擊的對象是服務器的宿主機。數組

 

DVWA的相應模塊中,有以下功能:應用提供了一個用來ping對象主機的功能。正常狀況下,輸入IP地址,返回命令結果。安全

在DVWA最低防護級別下,嘗試進行攻擊。服務器

因爲在windows cmd和linux shell條件下,均可以經過&&來串行執行命令,咱們附上dir命令執行後:測試

能夠看到dir命令被執行,而且打印出了其結果。spa

若是咱們用更復雜的命令附在以上命令以後,基本均可以執行,包括建立刪除文件等等,能夠對宿主系統形成很是大的危害。操作系統

 

2. 防護機制

 分別對比DVWA4個安全級別的後臺核心代碼:3d

Low:

代碼使用shell_exec將用戶輸入執行ping命令,基本沒有任何防護。

Medium:

使用黑名單機制,替換掉如「&&」和「;」這樣的命令符號。可是這樣簡單的黑名單是很容易繞過的,好比「|」管道符就沒有屏蔽。

High:

完善了黑名單機制,篩除了更多字符,但仍有可能繞開。

Impossible:

使用白名單機制替換掉黑名單,將用戶輸入的字符串重組爲數組,依次遍歷數組內元素,刪除其中全部的非數字和「.」。這樣就達到了防護命令注入的目的。

 

相關文章
相關標籤/搜索