什麼是Command Injection?
Command Injection發生在Web應用程式需要呼叫底層作業系統(OS)指令,卻沒有對使用者輸入的資料進行妥善過濾或轉義的時候。攻擊者可以在輸入框中加入系統指令的連接符號,藉此讓伺服器執行預期之外的指令,進而取得伺服器權限、讀取敏感檔案或篡改系統。
DVWA 實作步驟(Low 安全等級)
輸入:127.0.0.1
點擊 Submit
網頁回傳了標準 Linux ping 指令的執行結果。

構造漏洞攻擊(Payload)
利用Linux系統中;的特性,嘗試拼接自訂指令
輸入:127.0.0.1; whoami
畫面除了顯示 Ping 的回應外,最下方印出了 www-data(Web 伺服器目前的權限帳號)。
進一步擴大影響
嘗試讀取伺服器目錄下的檔案清單
輸入:127.0.0.1; ls -la
成功列出伺服器當前目錄內的所有檔案與資料夾結構。
$target = $_REQUEST[ 'ip' ];
$cmd = shell_exec( 'ping -c 4 ' . $target );
後端完全沒有驗證$target的內容,直接使用字串拼接將輸入放入shell_exec()執行,導致攻擊者輸入的;whoami 被整段當成系統指令執行。
1.避免呼叫 OS 指令:優先使用程式語言原生的API或函式庫替代系統指令。
2.嚴格輸入過濾/白名單驗證:僅允許符合IP格式的字元(數字與英文句點),過濾 ;、&、| 等特殊符號。
3.使用參數化/防護函式:若必須使用系統指令,應使用escapeshellcmd()或escapeshellarg()進行安全轉義。