# SSTI Lab7 這題是 Server-Side Template Injection (SSTI) with Custom Exploit,你需要透過模板漏洞,結合目標程式邏輯,最終刪除 Carlos 的檔案 `/home/carlos/.ssh/id_rsa`。 可以使用以下認證登錄自己的帳戶:`wiener:peter` 一樣先進入網站並登入。 ![image](https://hackmd.io/_uploads/ryNXijUwlx.png) ![image](https://hackmd.io/_uploads/ryp7soUvlg.png) 這題登入之後除了可以改使用者名字之外還可以上傳照片,但還不確定能幹嘛,所以先透過過去有試過的方法去進行測試(資料不多的情況下先走保守路線,再一步步去找新線索)。 ![image](https://hackmd.io/_uploads/SyzY3oLPxg.png) 可以發現我們依然會顯示名稱,所以回到更改使用者名字的頁面,在前面的章節能透過這樣的方法進行注入,因此我這裡也使用相同的方式來試誤。 ![image](https://hackmd.io/_uploads/Sy5GajUPgx.png) ![image](https://hackmd.io/_uploads/S1fEpjUvge.png) 顯然是可以注入的,所以我看看能不能直接抓他的檔案內容(這步比較跳脫,就是單純通靈戰術)。 ![image](https://hackmd.io/_uploads/rkFv-2LPex.png) 一樣是 302,不過在 Histroy 中出現了新的資訊。 ![image](https://hackmd.io/_uploads/Syg3W2UDee.png) 這裡直接 GET 過去看看。 ![image](https://hackmd.io/_uploads/BJuQGhUvxg.png) 可以看到我們上傳的照片(???),這裡我還沒想到甚麼,但能確定我們可以讀取系統裡的檔案,接著我想說先嘗試看看上傳照片檔可以做甚麼。 ![image](https://hackmd.io/_uploads/B15HJh8wxe.png) ![image](https://hackmd.io/_uploads/SylVJ28Dlx.png) 結果他直接報錯,但有個 .php,或許有用,所以我直接去看看這個檔案內容。 ``` {{ user.setAvatar('/home/carlos/User.php', 'image/jpg') }} ``` ![image](https://hackmd.io/_uploads/SJspzh8Dgx.png) ![image](https://hackmd.io/_uploads/S1BOV2Uwgx.png) 一路看下來,發現這裡特別詭異: ![image](https://hackmd.io/_uploads/rJTkB3UPgg.png) 這裡執行了三件事: - `readlink($this->avatarLink)` → 拿到 avatar 檔案的「實際檔案路徑」。 - 如果是 symlink,就解開。 - 指定的 avatar 是 `/home/carlos/.ssh/id_rsa`,所以這邊就是拿那個路徑。 - `rm(...)` → 呼叫自訂刪除函式 `unlink()` 去刪檔案。 - 所以這一步就是直接 `unlink("/home/carlos/.ssh/id_rsa")`。 - `delete()` → 寫入 disabled 檔案(不是我們的重點)。 這個 gdprDelete() 就是我們要用來刪掉 Carlos 的私鑰的方法,所以我們先把 Carlos 的私鑰設為 avatar。 ``` {{+user.setAvatar('/home/carlos/.ssh/id_rsa',+'image/jpg')+}} ``` ![image](https://hackmd.io/_uploads/HyQ5HhIPeg.png) 接著刪除他。 ![image](https://hackmd.io/_uploads/B1-K8nUwxe.png) ![image](https://hackmd.io/_uploads/Hy34U3Uvlx.png) ---