Python模板注入

2022-09-17 21:27:23 字數 1944 閱讀 6049

近期遇到python模板注入問題,故在此整理,便於後期回顧。

首先什麼是「python模板」呢?python有很多模板引擎可以幫助我們構建完善的web應用程式。這裡將要討論的就是jinja2

。而「模板注入」就是在模板中注入特定的**,這裡的模板可能是檔案,也可能是字串。

在jinja2中,使用執行for迴圈或賦值語句,使用}把表達的結果列印到模板上。更具體的內容可直接檢視jinja2中文文件。

先搭建flask虛擬環境,進入scripts中,建立template.py。不再贅述,詳細步驟在flask

# template.py

from flask import

from flask import flask, request

def exp():

input = request.args.get('input')

result = template("this is }")

return result.render(thing=input)

}看出,這裡的thing就是乙個變數,我們可以在url中可以將期待的值輸入到input交給flask給到thing渲染。但是這裡的thing就是個字串,如果傳入表示式,它並不能做出相應的執行。

對**進行以下修改,發現表示式被執行

我們拿到這個漏洞自然想要更多的許可權對系統或檔案進行操作,這需要利用python的特性,python可以利用os或subprocess模組執行系統命令。

那我們怎麼找到os模組呢?

可以利用.__class__隨便確定乙個類,.__class__前面的這個同樣可以換成''""等。因為我們的目的是確定基類。

那基類怎麼找呢?.__class__.__base__

找到基類了,就完成了第一步,接下來,我們需要知道其直接子類的弱引用列表,方便我們找到os模組。那這個直接子類的弱引用列表怎麼找呢?.__class__.__base__.__subclasses__()。下圖僅作示意

為了更好的理解這個問題,還是借助攻防世界的題目web_python_template_injection來做

· 在題目場景鏈結後加上/}即可檢視列表

· 如何從這個列表中,找到os相關的類?

窮舉這個列表,如果os列表元素.__init__.__globals__中,就print該元素及其位置。剩下的以後再補充吧。。

模板注入 python

在學習ssti之前,先把flask的運作流程搞明白。這樣有利用更快速的理解原理。先看一段 from flask importflask defhello word return hello word route裝飾器的作用是將函式與url繫結起來。例子中的 的作用就是當你訪問的時候,flask會返回...

模板注入SSTI

layout post title ssti模板注入 categories 網路安全cybersecurity tags ssti 兩個引數 1,html 模板 2,需要修改的引數 function display tplfile,tplvars null html compile tplfilep...

python注入攻擊 mySql 注入攻擊

注入攻擊 1.原理 a.只要是帶有引數的動態網頁且此網頁訪問了資料庫,那麼就有可能存在sql注入 b.字串拼接和沒有判斷使用者輸入是否合法 導致使用者可以玩填字遊戲 sql注入攻擊會導致的資料庫安全風險包括 刷庫 拖庫 撞庫。2.簡單解決方法 預防字串拼接 可以使用變數繫結避免注入攻擊.以查詢語句為...