SSTI

https://portswigger.net/web-security/server-side-template-injection

簡介

SSTI 全稱 Server-side template injection ,服務端模板注入

什麼是模板、SSTI

模板引擎被設計用來將可變的數據插入到固定的頁面模板中以生成 web 頁面。此處的模板指的是 JavaScript template 。其是用來減少工作量、簡化開發,用來生成 除數據外頁面結構相同的 web 頁面。

當用戶輸入直接被插入到模板中,而不是以值的形式傳進去,則會導致攻擊者可以注入任意的模板指令。

例如有如下的 PHP 代碼,其中 twig 爲php 的模板引擎。

# 參數以值的形式傳遞,不存在該漏洞
$output = $twig->render("Dear {first_name},", array("first_name" => $user.first_name) );
# 參數直接插入到模板中,存在 SSTI
$output = $twig->render("Dear ".$_GET['name']);

# 利用方式
http://vulnerable-website.com/?name={{bad-stuff-here}}

可以看到,該漏洞產生原理和 SQL 注入 相像,都是用戶輸入參數未作處理,直接當作指令的一部分執行。

是否使用預編譯

CSTI & SSTI

根據最終模板代碼執行位置的不同,模板注入分爲服務端模板注入和客戶端模板注入。

漏洞危害

該漏洞最終危害就是執行任意的模板代碼。

同樣是執行 js 代碼,服務端的 js 危害更大。

但通常受限於不同模板引擎的規則,造成的影響也不同,例如絕大多數模板引擎都默認存在沙箱安全機制。

如何攻擊

  1. 檢測是否存在模板注入的漏洞
  2. 識別服務端使用何種模板引擎,因爲不同的模板引擎語法不同。
  3. 進行利用

自動化工具 tplmap https://github.com/epinna/tplmap

效果一般,識別能力不太行,用來利用還不錯。

如何防禦

攻擊

payload 參考:https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection

檢測是否存在模板引擎

對參數進行fuzz ${{<%[%'"}}%\

對可疑的輸入參數進行審計。

檢測

在管理界面有修改顯示名的功能,而實際展現修改後的效果,是在另一個頁面觸發。

利用

查詢官方文檔,尋找敏感功能,進行利用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章