热搜:

Python模板引擎的注入问题怎么办_Python模板引擎的注入问题分析②

2017-01-05 15:16:52文章来源:点点软件园热度:0

更多
派森(Python)

派森(Python)官方版3.5.2

类别:编程书集编程工具语言:简体中文授权:免费软件

  这几年比较火的一个漏洞就是jinjia2之类的模板引擎的注入,通过注入模板引擎的一些特定的指令格式,比如 {{1+1}} 而返回了 2 得知漏洞存在。实际类似的问题在Python原生字符串中就存在,尤其是Python 3.6新增 f 字符串后,虽然利用还不明确,但是应该引起注意。更多最新IT资讯尽在金顺软件园http://www.jinshun168.com/


软件名称:Python下载
软件大小:34.95MB
下载地址:http://www.jinshun168.com/soft/4377.html


  最原始的 %


  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方法相关


  除了上面的payload改写

为 print ("Password " + passwd + " is wrong for user {user}").format(**userdata) 之外,还可以

  >>> import os>>> '{0.system}'.format(os)'' 会先把 0 替换为 format 中的参数,然后继续获取相关的属性。


  但是貌似只能

  获取属性,不能执行方法?但是也可以获取一些敏感信息了。


   金顺软件园小编推荐:


   学习Python语言中文怎么输出


   CentOS+nginx+uwsgi+Python 多站点环境搭建




  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下变量的能力。


  >>> 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编程集合怎么使用


   python访问mysql数据库的实现方法

以上,就是金顺软件园小编给大家带来的Python模板引擎的注入问题怎么办_Python模板引擎的注入问题分析②全部内容,希望对大家有所帮助!

上一篇VR/AR手套控制器Senso怎么样下一篇怎样使用SQL Server作业设置定时任务
编辑:冬天刚发芽
标签Python