Flask Jinja2開發中遇到的的服務端注入問題研究
0×00. 前言
0×01. 測試代碼
為了更好地演示Flask/Jinja2 開發中的SSTI問題,我們搭建一個小的POC程序(基於Flask 框架),主要由兩個python腳本組成:
Flask-test.py
一些開發者可能認為為一個簡單的404錯誤頁面去單獨創建一個模板文件是多餘的,他們更喜歡在404 視圖函數中用模板字元串(正如上述測試代碼中的page_not_found函數中的template字元串)代替單獨的404模板文件; 一些開發者還會在返回的錯誤頁面中提示用戶是哪一個URL導致了404錯誤,但他們不把錯誤的URL傳遞給render_template_string模板上下文,而是喜歡用%s動態地將問題URL傳遞給模板字元串,這些看起來都很OK。但實際上真的是這樣的嗎,讓我們接著往下看
0×02. render_template_string 函數中默認上下文對象引起的SSTI問題
我們開始測試,404函數功能沒得問題,確實顯示了錯誤信息,並指出哪一個URL導致了此問題
到這裡,很多人可能都想到了這個404函數存在的問題,對,就是XSS,是的,的確存在XSS漏洞,這也屬於SSTI,但這篇文章不想討論這一點, 如果你再深入思考一下,可能會發現這裡存在代碼注入,比如當我們的URL是下面這樣,URL中包含了Jinjia2語法表達式:
http://10.1.100.3:5000/{}
我們發現模板引擎執行了8+8,並返回了結果,這是一個簡單的SSTI問題,我們再來看看其他有趣的SSTI 問題, 我們來看看
render_template_string 函數的定義:
def render_template_string(source, **context):"""Renders a template from the given template source string
with the given context.
:param source: the sourcecode of the template to be
rendered
:param context: the variables that should be available in the
context of the template.
"""ctx = _app_ctx_stack.top
ctx.app.update_template_context(context)return _render(ctx.app.jinja_env.from_string(source),
context, ctx.app)
這裡有兩個參數,一個是source,很簡單就是需要渲染的模板字元串, 另一個是個包裹關鍵字傳遞參數(字典), 表示的是模板上下文,這裡我們
就簡單說一下這個Flask/Jinjia2開發中的模板上下文。主要有三個上下文,


※淺談WAF繞過技巧
※智庫報告:英國「三叉戟」核潛艇系統存在網路安全隱患易受網路攻擊
※【FB TV】一周「BUF大事件」:《網路安全法》開始施行;首屆TCTF線下決賽火熱進行;Fireball全球肆虐
※如何在macOS上監聽單個應用HTTPS流量
※MSF外網持久控制Android手機並滲透測試區域網
TAG:FreeBuf |
※Instagram發布新視頻服務挑戰YouTube
※Google為開發者提供Cloud Filestore雲存儲服務
※springcloud的微服務開發日記之三
※微軟發布第二代Azure Data Lake Storage服務預覽版
※WannaMine新動向:對Weblogic服務端發起大規模攻擊
※Box、IBM推出了新的、使用Watson的Box Skills構建服務
※uCloudlink 推出創新移動數據服務 「GlocalMe Inside」
※2018年Automechanika Ho Chi Minh City盛大開幕,為發展蓬勃的越南汽車服務業注入新動力
※spring-cloud 服務網關中的 Timeout 設置
※Rackspace推出Kubernetes即服務產品,並收購RelationEdge
※Facebook宣布關停Moves、Hello、tbh三項服務
※Facebook 推出遊戲直播服務 Fb.gg,對標 Twitch
※在c#中創建Windows服務
※Uber推出Eats for Business商務訂餐服務
※Google發布YouTube音樂和YouTube Premium服務
※Beatport收購Pulselocker,打造下一代DJ流媒體服務
※Starbucks 或將於今年在中國開通外送服務?
※Facebook面向全球用戶開放Watch視頻服務
※Istio技術與實踐02:源碼解析之Istio on Kubernetes 統一服務發現
※看我如何發現微軟Microsoft Translator Hub服務高危漏洞