亚洲精品不卡久久久久久_色视频线观看在线 _妽妽夹得我好舒服_国产真人一级a爱做片高潮_亚洲aⅴ无码专区在线观看q

當(dāng)前位置: 首頁 >綜合 > 正文

服務(wù)器端模板注入漏洞簡介|全球微動(dòng)態(tài)

2023-06-30 08:01:56 來源:51CTO

譯者 | 劉濤

審校 | 重樓


(資料圖片)

服務(wù)器端模板注入(SSTI)漏洞是網(wǎng)絡(luò)應(yīng)用安全中不太為人所知的一種漏洞類型。盡管這些漏洞很少見,但一旦被發(fā)現(xiàn),其影響往往非常嚴(yán)重,通常會(huì)導(dǎo)致遠(yuǎn)程代碼執(zhí)行(RCE)。

本文旨在揭示這些問題是如何產(chǎn)生的,并找出它們?cè)诂F(xiàn)實(shí)環(huán)境中經(jīng)常出現(xiàn)的地方。

什么是服務(wù)器端模板(Server-Side Templates)

現(xiàn)代網(wǎng)絡(luò)嚴(yán)重依賴于大量的用戶信息、產(chǎn)品細(xì)節(jié)和各種其他類型的數(shù)據(jù)。為了以有意義的方式呈現(xiàn)這些信息,就需要在網(wǎng)頁上對(duì)它們進(jìn)行有效的組織,這樣用戶才能快速找到最重要的信息;這也是用戶從精選的搞笑圖片頁面中獲得快樂的方式。

模板語言和框架引入了特殊的語法和結(jié)構(gòu),使開發(fā)人員能夠創(chuàng)建包含靜態(tài)內(nèi)容的模板,同時(shí)提供的語法和結(jié)構(gòu)允許動(dòng)態(tài)內(nèi)容在不需要混合后端和前端代碼的情況下呈現(xiàn)。

安全問題從何而來?

如果攻擊者可以發(fā)送請(qǐng)求,從而使服務(wù)器的模板引擎把用戶的輸入當(dāng)作模板來處理,那么就會(huì)產(chǎn)生安全問題。一個(gè)好的安全評(píng)估在尋找這類漏洞時(shí),需要專注考慮以下幾個(gè)方面:

管理員功能 - 允許管理員定制頁面,橫幅,或者應(yīng)用程序中的其他可視元素,有時(shí)還會(huì)提供模版作為一項(xiàng)特色。一些開發(fā)人員甚至可能選擇允許訪問模板語言,從而打開這個(gè)漏洞。

未經(jīng)過濾的輸入 - 任何可能返回給用戶或顯示在另一頁上的輸入都可能導(dǎo)致SSTI,具體取決于網(wǎng)站的功能。既然理解了模板語言的用例,那么請(qǐng)戴上您的開發(fā)帽,思考您會(huì)在哪些地方使用模板。

測試SSTI漏洞

如果懷疑應(yīng)用程序存在SSTI漏洞,那么在應(yīng)用程序中可以使用一些模板語言。測試越有針對(duì)性,效果越好。如果能夠通過偵測確定應(yīng)用程序的開發(fā)語言(如Python/Java/PHP等),則可以為目標(biāo)語言中常用的模板框架創(chuàng)建測試有效載荷。

SSTI Polyglot Payload

SSTI Polyglot有效載荷旨在跨多個(gè)框架和語言測試SSTI漏洞。在源代碼未知的情況下,它可以輔助測試。但由于此特定有效載荷很常見,且包含大量特殊字符(如${{<%[%""}}%),所以它更可能被輸入過濾( input sanitization)攔截或被防火墻(WAFs)阻斷。

可以考慮在請(qǐng)求中使用有效載荷,以在目標(biāo)應(yīng)用程序上觸發(fā)某種錯(cuò)誤消息。

GET/search?query=${{<%[%""}}%\.Python - Jinja2(Python的一組模板引擎)

一個(gè)簡單的用于測試應(yīng)用程序是否正在處理Jinja模板的有效載荷是{{7*7}},如果應(yīng)用程序正在處理該模板,則頁面上將顯示49。

為了進(jìn)一步提升這個(gè)有效載荷,您可以嘗試使用下面的示例來使用Python的OS包執(zhí)行date命令。

{{self.__init__.__globals__.__builtins__.__import__("os").popen("date").read()}}

在使用上述示例時(shí),您正在使用Jinja來執(zhí)行OS功能,從而執(zhí)行OS命令,而這些應(yīng)該包含在應(yīng)用程序的類路徑中。如果應(yīng)用程序的運(yùn)行環(huán)境特別嚴(yán)格,但您有一個(gè)可行的SSTI POC(證明服務(wù)器端模板注入漏洞存在漏洞利用代碼),您可以考慮深入研究應(yīng)用程序使用的任何其他Python包。例如,您嘗試通過SSTI訪問常用的requests包以進(jìn)行進(jìn)一步地利用。這類似于您可能在反序列化漏洞中看到的應(yīng)用開發(fā)方式。

Jinja 過濾器旁路

您也應(yīng)該知道,對(duì)于Jinja2 應(yīng)用防火墻和應(yīng)用程序過濾器存在繞過方法。過濾器和相關(guān)的繞過方法總是在變化,但是下面是您可能會(huì)看到的常見過濾器。

防火墻可能會(huì)攔self.__init__.__globals__.__builtins__.的某些部分。如果是這種情況,使用attr()可能會(huì)有所幫助,因?yàn)樗梢灾苯釉L問builtins(內(nèi)置函數(shù))對(duì)象。

{{ request|attr("builtins")|import("os")|popen("date")|read}}

深入研究過濾器繞過方法,您可以讓Python幫助轉(zhuǎn)換有效載荷!例如,使用format()可以在處理模板引擎時(shí)轉(zhuǎn)換有效載荷。當(dāng)某些組合. or_被阻止時(shí),這將有所幫助。

{{ request|format("%s%sbuiltins%s%s")|import("os")|popen("date")|read}}Java模板注入

Java有更多的模板框架需要應(yīng)對(duì),可能好壞參半?;赟pring的Web應(yīng)用程序非常常見,Baeldung有一個(gè)很棒的列表,網(wǎng)址如下:https://www.baeldung.com/spring-template-engines

ThymeLeaf(Java服務(wù)器端模板引擎)注入

這是 Java中常見的一種模板引擎類型,其利用 SSTI漏洞的方法已廣為人知。做個(gè)簡單的測試,看看是否存在模板注入漏洞,可以再次使用${7*7}這個(gè)方法,如果您在響應(yīng)中看到49而不是模板,那就意味著存在問題。

這種RCE有效載荷(一種遠(yuǎn)程代碼執(zhí)行的有效載荷)有兩種變體,Spring Expression Language (SpringEL) 和 Object Graph Navigation Language (OGNL)。SpringEL比較流行,也比較現(xiàn)代化,但是您可能會(huì)發(fā)現(xiàn) OGNL模板仍然被使用。這里是我們的示例,再次執(zhí)行date命令。

SpringEL ${T(java.lang.Runtime).getRuntime().exec(‘date’)}OGNL ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec(‘date’)}結(jié)束語

盡管本文只是一個(gè)簡單的介紹,但希望您能了解這些漏洞是如何被利用以及它們是如何產(chǎn)生的。這并沒有涵蓋所有可能的SSTI有效載荷和框架,但我建議您深入研究。

延伸閱讀

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server Side Template Injection/README.md

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

譯者介紹

劉濤,51CTO社區(qū)編輯,某大型央企系統(tǒng)上線檢測管控負(fù)責(zé)人。

原文標(biāo)題:An Introduction to Server Side Template Injection Bugs,作者:David Neal

標(biāo)簽:

返回頂部