# SSTI Lab2 本題是 Tornado template 的 code context 型 SSTI(Server-Side Template Injection),因為它不安全地使用 Tornado 範本。要解決該實驗室問題,請查看 Tornado 文件以瞭解如何執行任意代碼,從 Carlos 的主目錄中刪除該檔。morale.txt 可以使用以下認證登錄自己的帳戶:`wiener:peter` 一樣先進入網站。 ![image](https://hackmd.io/_uploads/SyLbScIwle.png) ![image](https://hackmd.io/_uploads/Sk4HScIDgg.png) 登入後可以改電子郵件跟名字設定,而這裡可以發現說,在發表的留言上面顯示「作者名稱」,而這個「名稱」是可以變的,在「My account」頁面可以設定顯示名稱為: - `user.name` - `user.first_name` - `user.nickname` 這已經明顯透露使用者顯示名稱是從變數中用 template 渲染出來的,而且你能控制是哪個變數。 ``` template + 你能控制變數名 = code context injection(有機率是) ``` 所以我們從這裡去破解他看看,先攔截他的請求封包。 ![image](https://hackmd.io/_uploads/HyD4UcIPle.png) 這裡可以嘗試加入兩段資訊,看看他會不會成功,如果成功的話應該會是使用者名再接上 49。 ![image](https://hackmd.io/_uploads/HkeHw5LPge.png) ![image](https://hackmd.io/_uploads/rkIuPcIPlg.png) 雖然是 302,但回到網站確實成功了,接著下一步就是用點 Python 來搞事。(Tornado 是一個 Python 的 Web 框架) 補充: - `{{ ... }}` → 顯示變數或運算結果。 - `{% ... %}` → 執行任意 Python 語法。 那我們一樣先 import os,再輸入指令 ls,看東西在哪。 ```js {{__import__('os').system('ls')}} ``` ![image](https://hackmd.io/_uploads/HyqXt9Ivlg.png) 找到目標檔案,所以直接 rm 刪除。 ```js <%25=+system(%22rm+morale.txt%22)+%25> ``` ![image](https://hackmd.io/_uploads/rkl_Kq8Pgg.png) ---