国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 阳春市| 洛浦县| 同仁县| 拉萨市| 德惠市| 清远市| 色达县| 乌鲁木齐市| 万州区| 襄汾县| 泽州县| 定边县| 江源县| 大港区| 海兴县| 三都| 曲松县| 鄂伦春自治旗| 桂阳县| 赤壁市| 大理市| 虹口区| 乐至县| 柯坪县| 左权县| 商城县| 凤山市| 静海县| 太原市| 夏津县| 太和县| 吉首市| 广灵县| 清徐县| 且末县| 柯坪县| 茌平县| 策勒县| 钟祥市| 格尔木市| 台东市|