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

首頁 > 編程 > Python > 正文

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

2020-02-23 04:12:16
字體:
供稿:網(wǎng)友

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

最原始的 %

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方法相關(guān)

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 中的參數(shù),然后繼續(xù)獲取相關(guān)的屬性。

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

例子: 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中的模板字符串類似,有了獲取當(dāng)前context下變量的能力。

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

>>> a = "Hello">>> b = f"{a} World">>> b'Hello World'

而且不僅僅限制為屬性了,代碼可以執(zhí)行了。

>>> 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'

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永善县| 九寨沟县| 澄城县| 任丘市| 台中县| 长治市| 浮梁县| 克拉玛依市| 鄂温| 临海市| 延寿县| 孝昌县| 武穴市| 如皋市| 廉江市| 湾仔区| 青神县| 汕尾市| 金山区| 彭山县| 平山县| 天峨县| 仙居县| 柳江县| 三明市| 登封市| 道孚县| 隆昌县| 塔城市| 张家口市| 姜堰市| 扶余县| 凤冈县| 武城县| 阜新市| 资中县| 定州市| 玉环县| 临颍县| 济宁市| 邻水|