當前位置:
首頁 > 最新 > Flask Jinja2開發中遇到的的服務端注入問題研究

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開發中的模板上下文。主要有三個上下文,

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

淺談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服務高危漏洞