iT邦幫忙

2025 iThome 鐵人賽

DAY 0
0
自我挑戰組

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

【Day 17】繞過 Medium 等級的 Command Injection 防禦

  • 分享至 

  • xImage
  •  

前言

之前在 low 等級的 Command Injection 關卡中,我透過簡單的 && 或 ; 成功在伺服器上執行了任意指令。那種感覺很直接,但也讓我好奇,一個稍有安全意識的開發者會如何防禦?

所以,今天我的目標是將 DVWA 的安全等級提升到 medium,然後用同樣的漏洞,看看會遇到什麼樣的抵抗。我預期我昨天的 payload 應該會失效,而我的任務就是找出防禦機制的原理,並想辦法繞過它。

第一步:碰壁
我先登入 DVWA,在 「DVWA Security」 頁面將安全等級設定為 medium,然後回到 「Command Injection」 關卡。
https://ithelp.ithome.com.tw/upload/images/20251014/20173483hBKL818sCL.png

我輸入了 payload:
8.8.8.8 && ls -la

按下「Submit」。

結果... ls -la 的輸出消失了。頁面上只剩下 ping 8.8.8.8 的正常回傳結果。我試了另一個 payload 8.8.8.8 ; whoami,同樣地,只有 ping 的結果,whoami 的結果石沉大海。
https://ithelp.ithome.com.tw/upload/images/20251014/201734837Mru4W8sGJ.png

看來,medium 肯定做了些什麼。

第二步:看穿敵人的招數 (檢視原始碼)
我點擊頁面下方的「View Source」按鈕,看到了 medium 等級的核心程式碼:
https://ithelp.ithome.com.tw/upload/images/20251014/20173483h3jcYRFaCn.png

PHP

程式碼裡建立了一個 黑名單 (Blacklist)。它明確地定義了兩個「壞字元」:&& 和 ;。然後,在執行 shell_exec 之前,它用 str_replace 這個函數,把我輸入的字串 ($target) 中所有 && 和 ; 都替換成空字串——也就是直接刪除。
https://ithelp.ithome.com.tw/upload/images/20251014/20173483EyvB8tGC3Q.png
所以當我輸入 8.8.8.8 && ls -la,經過這層過濾後,真正被執行的指令其實是 ping -c 4 8.8.8.8 ls -la。對 ping 指令來說,ls 和 -la 只是無法識別的無效參數,所以它就直接忽略了,只執行了 ping 8.8.8.8 的部分。

第三步:尋找黑名單的漏洞
黑名單策略有一個天生的弱點:它只防禦了開發者「想到」的攻擊方式。如果攻擊者能找到一個開發者「沒想到」的方法,那整個防禦就形同虛設。

我的任務,就是找出一個不在黑名單上,但同樣可以分隔或串接指令的字元。在 Linux shell 中,除了 && 和 ;,還有什麼呢?

我立刻想到了 管道符 (Pipe): |。

command1 | command2 的作用是將 command1 的標準輸出 (stdout) 作為 command2 的標準輸入 (stdin)。雖然 ping 的輸出對 ls 沒什麼用,但重點是,| 這個符號同樣能讓 shell 知道後面還有第二個指令要執行!而 | 並沒有出現在那個小小的黑名單裡。

我的新 payload 就此誕生:8.8.8.8 | ls -la

第四步:繞過成功!
我回到頁面,在輸入框中貼上我的新 payload,按下「Submit」。
https://ithelp.ithome.com.tw/upload/images/20251014/20173483J2MWMDOdU9.png

頁面刷新後,我看到了 ping 的結果,而在那下面,ls -la 的檔案列表赫然在目!

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

繞過成功!這個 medium 等級的防禦,被我用一個黑名單上沒有的字元給突破了。

今日總結
今天我學到了非常重要的一課:

黑名單是不安全的:防禦者要考慮到所有可能的攻擊字元,而攻擊者只需要找到一個被遺漏的即可。這是一場不公平的比賽。

繞過思維:當一種方法被阻擋時,不要放棄,而是要去思考「還有沒有其他方式可以達到同樣的目的」。


上一篇
【Day 16】Kali啟動問題(二)
系列文
使用 DVWA 與 Kali Linux 的攻防學習17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言