国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 16:25:54
字體:
來源:轉載
供稿:網友

這幾年比較火的一個漏洞就是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 ("Password " + passwd + " is wrong for user {user}").format(**userdata) 之外,還可以

>>> import os>>> '{0.system}'.format(os)'<built-in function system>'

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

但是貌似只能獲取屬性,不能執行方法?但是也可以獲取一些敏感信息了。

例子: http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/

CONFIG = {  'SECRET_KEY': 'super secret key'}class Event(object):  def __init__(self, id, level, message):    self.id = id    self.level = level    self.message = messagedef 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   vardev   home   linuxrc mnt   root   sbin   sys   usr'0'>>> f"{(lambda x: x - 10)(100)}"'90'

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 融水| 股票| 乐安县| 舟山市| 浪卡子县| 东城区| 芦山县| 凉城县| 奉节县| 鄂托克旗| 内丘县| 宁海县| 昌邑市| 临颍县| 临沂市| 丹江口市| 亳州市| 武安市| 三穗县| 增城市| 庆阳市| 宣威市| 余姚市| 措美县| 林西县| 鄢陵县| 阳山县| 佛坪县| 红原县| 涿鹿县| 乌拉特前旗| 丁青县| 满洲里市| 永年县| 汉寿县| 长岭县| 鹰潭市| 昭平县| 边坝县| 广宁县| 南岸区|