# SSTI Lab7 這題是 Server-Side Template Injection (SSTI) with Custom Exploit,你需要透過模板漏洞,結合目標程式邏輯,最終刪除 Carlos 的檔案 `/home/carlos/.ssh/id_rsa`。 可以使用以下認證登錄自己的帳戶:`wiener:peter` 一樣先進入網站並登入。   這題登入之後除了可以改使用者名字之外還可以上傳照片,但還不確定能幹嘛,所以先透過過去有試過的方法去進行測試(資料不多的情況下先走保守路線,再一步步去找新線索)。  可以發現我們依然會顯示名稱,所以回到更改使用者名字的頁面,在前面的章節能透過這樣的方法進行注入,因此我這裡也使用相同的方式來試誤。   顯然是可以注入的,所以我看看能不能直接抓他的檔案內容(這步比較跳脫,就是單純通靈戰術)。  一樣是 302,不過在 Histroy 中出現了新的資訊。  這裡直接 GET 過去看看。  可以看到我們上傳的照片(???),這裡我還沒想到甚麼,但能確定我們可以讀取系統裡的檔案,接著我想說先嘗試看看上傳照片檔可以做甚麼。   結果他直接報錯,但有個 .php,或許有用,所以我直接去看看這個檔案內容。 ``` {{ user.setAvatar('/home/carlos/User.php', 'image/jpg') }} ```   一路看下來,發現這裡特別詭異:  這裡執行了三件事: - `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')+}} ```  接著刪除他。   ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up