首頁 後端開發 Python教學 Python 模板引擎的注入問題分析

Python 模板引擎的注入問題分析

Feb 11, 2017 pm 01:16 PM

本文給大家主要講述的是Python 模板引擎的注入問題分析,以及如何防範和需要注意的地方,有需要的小伙伴可以參考下

這幾年比較火的一個漏洞就是jinjia2之類的模板引擎的注入,透過注入模板引擎的一些特定的指令格式,例如{{1+1}} 而返回了2 得知漏洞存在。實際類似的問題在Python原生字串中就存在,尤其是Python 3.6新增 f 字串後,雖然利用還不明確,但應該要注意。

最原始的 %

userdata = {"user" : "jdoe", "password" : "secret" }
passwd = raw_input("Password: ")

if passwd != userdata["password"]:
  print ("Password " + passwd + " is wrong for user %(user)s") % userdata
登入後複製

如果用戶輸入 %(password)s 那就可以取得使用者的真實密碼了。

format方法相關

https://docs.python.org/3/library/functions.html#format

除了上面的payload改寫為print ("" + wrong + " isPasswords user {user}").format(**userdata) 之外,還可以

>>> import os
>>> '{0.system}'.format(os)
'<built-in function system>'
登入後複製

會先把0 替換為format 中的參數,然後繼續取得相關的屬性。

但是看似只能取得屬性,不能執行方法?但是也可以獲得一些敏感資訊了。

範例: http://www.php.cn/

CONFIG = {
  'SECRET_KEY': 'super secret key'
}

class Event(object):
  def __init__(self, id, level, message):
    self.id = id
    self.level = level
    self.message = message

def format_event(format_string, event):
  return format_string.format(event=event)
登入後複製

如果 format_string 為 {event.__init__.__globals__[CONFIG][SECRET_KEY]} 就可以洩漏敏感資訊。

Python 3.6中的 f 字串

這個字串非常厲害,和Javascript ES6中的範本字串類似,有了取得當前context下變數的能力。

https://docs.python.org/3/reference/lexical_analysis.html#f-strings

>>> a = "Hello"
>>> b = f"{a} World"
>>> b
'Hello World'
登入後複製

而且不僅限制為屬性了,程式碼可以執行了。

>>> import os
>>> f"{os.system('ls')}"
bin   etc   lib   media  proc   run   srv   tmp   var
dev   home   linuxrc mnt   root   sbin   sys   usr
'0'

>>> f"{(lambda x: x - 10)(100)}"
'90'
登入後複製

但是貌似 沒有 把一個普通字串轉換為 f 字串的方法,也就是說使用者很可能無法控制一個 f 字串,可能無法利用,還需要繼續查一下。

更多Python 模板引擎的注入問題分析相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Python查找文本文件的ZIPF分佈 如何使用Python查找文本文件的ZIPF分佈 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分佈

python中的圖像過濾 python中的圖像過濾 Mar 03, 2025 am 09:44 AM

python中的圖像過濾

如何在Python中下載文件 如何在Python中下載文件 Mar 01, 2025 am 10:03 AM

如何在Python中下載文件

我如何使用美麗的湯來解析HTML? 我如何使用美麗的湯來解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美麗的湯來解析HTML?

如何使用Python使用PDF文檔 如何使用Python使用PDF文檔 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文檔

如何在django應用程序中使用redis緩存 如何在django應用程序中使用redis緩存 Mar 02, 2025 am 10:10 AM

如何在django應用程序中使用redis緩存

引入自然語言工具包(NLTK) 引入自然語言工具包(NLTK) Mar 01, 2025 am 10:05 AM

引入自然語言工具包(NLTK)

如何使用TensorFlow或Pytorch進行深度學習? 如何使用TensorFlow或Pytorch進行深度學習? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch進行深度學習?

See all articles