99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python 模板字符串與模板注入

發(fā)布時間:2017-01-03 23:26  回復(fù):0  查看:3214   最后回復(fù):2017-01-03 23:26  

這幾年python開發(fā)中,比較火的一個漏洞就是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)

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

  >>> import os>>> '{0.system}'.format(os)''

  會先把 0 替換為 format 中的參數(shù),然后繼續(xù)獲取相關(guān)的屬性。

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

  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中的 字符串

  這個字符串非常厲害,和Javascript ES6中的模板字符串類似,有了獲取當(dāng)前context下變量的能力。

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

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

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

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


來源:virusdefender's blog

您還未登錄,請先登錄

熱門帖子

最新帖子

?