SSTI(模板注入)漏洞
阿新 • • 發佈:2022-05-18
學習於:https://www.cnblogs.com/bmjoker/p/13508538.html
模板引擎
模板引擎(這裡特指用於Web開發的模板引擎)是為了使使用者介面與業務資料(內容)分離而產生的,它可以生成特定格式的文件,利用模板引擎來生成前端的html程式碼,模板引擎會提供一套生成html程式碼的程式,然後只需要獲取使用者的資料,然後放到渲染函式裡,然後生成模板+使用者資料的前端html頁面,然後反饋給瀏覽器,呈現在使用者面前。
模板引擎也會提供沙箱機制來進行漏洞防範,但是可以用沙箱逃逸技術來進行繞過。
SSTI(模板注入)
SSTI 就是伺服器端模板注入(Server-Side Template Injection)
當前使用的一些框架,比如python的flask,php的tp,java的spring等一般都採用成熟的的MVC的模式,使用者的輸入先進入Controller控制器,然後根據請求型別和請求的指令傳送給對應Model業務模型進行業務邏輯判斷,資料庫存取,最後把結果返回給View檢視層,經過模板渲染展示給使用者。
漏洞成因就是服務端接收了使用者的惡意輸入以後,未經任何處理就將其作為 Web 應用模板內容的一部分,模板引擎在進行目標編譯渲染的過程中,執行了使用者插入的可以破壞模板的語句,因而可能導致了敏感資訊洩露、程式碼執行、GetShell 等問題。其影響範圍主要取決於模版引擎的複雜性。
凡是使用模板的地方都可能會出現 SSTI 的問題,SSTI 不屬於任何一種語言,沙盒繞過也不是,沙盒繞過只是由於模板引擎發現了很大的安全漏洞,然後模板引擎設計出來的一種防護機制,不允許使用沒有定義或者宣告的模組,這適用於所有的模板引擎。
附表
PHP中的SSTI
php常見的模板:twig,smarty,blade