iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
Security

嘗試使用OWASP ZAP與DVWA探索常見 Web 漏洞系列 第 6

DVWA 實作:Command Injection(指令注入)原理與攻防

  • 分享至 

  • xImage
  •  
  • 什麼是Command Injection?
    Command Injection發生在Web應用程式需要呼叫底層作業系統(OS)指令,卻沒有對使用者輸入的資料進行妥善過濾或轉義的時候。攻擊者可以在輸入框中加入系統指令的連接符號,藉此讓伺服器執行預期之外的指令,進而取得伺服器權限、讀取敏感檔案或篡改系統。

  • DVWA 實作步驟(Low 安全等級)

  1. 正常功能測試
    進入DVWA左側選單Command Injection,畫面提供了一個Ping IP的功能。

輸入:127.0.0.1
點擊 Submit
網頁回傳了標準 Linux ping 指令的執行結果。
https://ithelp.ithome.com.tw/upload/images/20260920/20179312N9zcXwqLHx.png

https://ithelp.ithome.com.tw/upload/images/20260920/20179312NQU7k7X8Gg.png

  1. 構造漏洞攻擊(Payload)
    利用Linux系統中;的特性,嘗試拼接自訂指令
    輸入:127.0.0.1; whoami
    畫面除了顯示 Ping 的回應外,最下方印出了 www-data(Web 伺服器目前的權限帳號)。
    https://ithelp.ithome.com.tw/upload/images/20260920/20179312b4u6gwQ8zF.png

  2. 進一步擴大影響
    嘗試讀取伺服器目錄下的檔案清單
    輸入:127.0.0.1; ls -la
    成功列出伺服器當前目錄內的所有檔案與資料夾結構。
    https://ithelp.ithome.com.tw/upload/images/20260920/20179312LU7ytXcGku.png

  • 漏洞成因分析
    在 Low 安全等級下,後端 PHP 程式碼大致如下:

$target = $_REQUEST[ 'ip' ];
$cmd = shell_exec( 'ping -c 4 ' . $target );

後端完全沒有驗證$target的內容,直接使用字串拼接將輸入放入shell_exec()執行,導致攻擊者輸入的;whoami 被整段當成系統指令執行。

  • 如何防禦?

1.避免呼叫 OS 指令:優先使用程式語言原生的API或函式庫替代系統指令。

2.嚴格輸入過濾/白名單驗證:僅允許符合IP格式的字元(數字與英文句點),過濾 ;、&、| 等特殊符號。

3.使用參數化/防護函式:若必須使用系統指令,應使用escapeshellcmd()或escapeshellarg()進行安全轉義。


上一篇
環境建置:使用 Docker 5 分鐘快速部署 DVWA 靶機
下一篇
DVWA 實作:SQL Injection(SQL 注入)原理、探測與攻防
系列文
嘗試使用OWASP ZAP與DVWA探索常見 Web 漏洞8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言