iT邦幫忙

2025 iThome 鐵人賽

DAY 0
0
自我挑戰組

使用 DVWA 與 Kali Linux 的攻防學習系列 第 10

【Day 10】直接跟伺服器對話(上):我的第一次 Command Injection 嘗試

  • 分享至 

  • xImage
  •  

前言

昨天用 Intruder 成功爆破出密碼,讓我很有成就感。那感覺像是找到了正確的鑰匙,打開了一扇門。而今天,我要挑戰的「Command Injection」(指令注入),感覺完全是另一個層級。如果說爆破是「猜鑰匙」,那指令注入就像是直接對著門鎖大喊「芝麻開門」,然後門就真的開了。

簡單來說,這個漏洞的目標是欺騙網站伺服器,讓它執行我所指定的系統指令。

第一步:探索目標功能
和之前一樣,我先把 DVWA 的安全等級設為 low,然後點擊左側選單的 「Command Injection」。

頁面很簡單,看起來是一個網路檢測工具。它有一個輸入框,讓我輸入 IP 位址,然後它會幫我 ping 這個 IP。

https://ithelp.ithome.com.tw/upload/images/20251014/20173483f5VBQrkkwG.png

我先正常地使用它,輸入 8.8.8.8 (Google 的 DNS 伺服器),然後按下「Submit」。頁面回傳了 ping 指令的執行結果,一切正常。這證明了後端伺服器確實接收了我的輸入,並執行了一個系統指令。

https://ithelp.ithome.com.tw/upload/images/20251014/20173483IXDw02ollG.png

第二步:構思我的第一個 Payload
既然我知道後端會執行系統指令,那我有沒有辦法在輸入 IP 的同時,再「塞」進第二個我自己的指令呢?

在 Linux 的終端機中,我們常用一些特殊字元來串接多個指令:

& 或 &&:command1 && command2 - 如果 command1 成功執行,就接著執行 command2。

;:command1 ; command2 - 不管 command1 是否成功,都接著執行 command2。

我的想法是,如果後端程式只是單純地把我的輸入字串拼接到 ping 指令後面,那我就可以利用這些字元來注入我想執行的指令。

我決定試試 ls -la 這個指令,它可以列出目前目錄下的所有檔案和詳細資訊。我的第一個 Payload 誕生了:

8.8.8.8 && ls -la

第三步:見證奇蹟的時刻
我把上面那串 payload 貼到輸入框,按下「Submit」。頁面重新載入後,我屏住了呼吸,仔細看著輸出結果。

首先,我看到了跟之前一樣的 ping 8.8.8.8 的結果。但是,在 ping 的結果下面,我看到了截然不同的東西!

https://ithelp.ithome.com.tw/upload/images/20251014/20173483nkq5rnX0wO.png

成功了!它真的執行了 ls -la!我看到了伺服器上這個網頁所在目錄的檔案列表。這個感覺比昨天猜對密碼還要震撼,因為我不再是作為一個「使用者」在跟網站互動,我已經可以「命令」伺服器做事了。

今日總結
今天,我親手利用了 Command Injection 漏洞,從一開始只能執行 ping,到最後能夠讀取伺服器上的敏感檔案。我也從原始碼層面理解了,這種「信任使用者輸入」的開發習慣是多麼危險。

明天我將嘗試其他指令。


上一篇
【Day 9】我的第一次自動化攻擊(下):用 Burp Suite Intruder 爆破密碼
下一篇
【Day 11】直接跟伺服器對話(下):我的第一次 Command Injection 嘗試
系列文
使用 DVWA 與 Kali Linux 的攻防學習17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言