关闭

Python学习之模板字符串与模板注入

130人阅读 评论(0) 收藏 举报

这几年python开发中,比较火的一个漏洞就是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方法相关

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

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

  会先把 0 替换为 format 中的参数,然后继续获取相关的属性。

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

  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中的模板字符串类似,有了获取当前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 字符串,可能无法利用,还需要继续查一下。

来源:virusdefender's blog

0
0
查看评论

Python的string模块中的Template类字符串模板用法

Python的string模块中的Template类字符串模板用法
  • ppdyhappy
  • ppdyhappy
  • 2016-10-27 11:27
  • 2154

Python的字符串模板(Template)使用操作实例讲解

#coding=utf8 ''' 字符串格式化操作符,需要程序员明确转换类型参数, 比如到底是转成字符串、整数还是其他什么类型。 新式的字符串模板的优势是不用去记住所有相关细节, 而是像shell风格的脚本语言里面那样使用美元符号($). 由于新式的字符串引进Templat...
  • henni_719
  • henni_719
  • 2017-03-29 11:28
  • 715

ES6折腾记-模板字符串

模板字符串[template string]是ES6引进来的,他有点类似我们平时使用的模板引擎【jade,handlebar这些】,但是又不是【功能相对鸡肋些,无法条件循环遍历什么的】
  • bomess
  • bomess
  • 2016-10-27 01:17
  • 2798

Python Module之string - 文本常量和模板

Python的string模块
  • ggGavin
  • ggGavin
  • 2017-12-28 14:35
  • 160

Java正则表达式实现${name}形式的字符串模板

在开发中类似站内信的需求时,我们经常要使用字符串模板,比如尊敬的用户${name}。。。。里面的${name}就可以替换为用户的用户名。下面使用正则表达式简单实现一下这个功能:/** * 根据键值对填充字符串,如("hello ${name}",{name:"...
  • zgljl2012
  • zgljl2012
  • 2016-05-14 19:26
  • 3234

C++模板之特化与偏特化详解

前言 说到C++模板,这个已经不是什么新东西了,自己在实际开发中也用过;对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。所以,今天就对此进行详...
  • ywcpig
  • ywcpig
  • 2016-09-14 18:51
  • 749

Java字符串模版

Java字符串模版
  • LittleSkey
  • LittleSkey
  • 2016-12-08 13:28
  • 838

es6 javascript的``模板字符串

正常使用js的数据放入页面的时候需要自己手动拼接字符串的,现在es6提供了一种模板字符串解决了这个问题 模板字符串( template string )是增强版的字符串,用反引号( ` )标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。 ps:反引号别告诉我不知道是...
  • qq_30100043
  • qq_30100043
  • 2016-11-16 16:39
  • 2110

python3.x编程模板总结

刚接触Python3版本的小伙伴们,编程时会对于Python中各种数据结构如:array、list、dict、set以及字符串str操作都不太熟悉。同时类似于Python网络编程、文件读取、数据库连接以及协程这些编程模板基本也都是固定的,本文便就这些方面进行总结,希望让大家进行Python3编程时能...
  • feilong_csdn
  • feilong_csdn
  • 2017-03-13 12:42
  • 980

Angular JS模板注入漏洞分析

(一)漏洞分析 0x00背景 周末挖掘漏洞的过程中,发现了一个有意思的XSS,是运用了Angular JS的模板进行注入,从而执行了恶意代码,思路和技术比较新颖。Angular JS是一款比较流行的前端MVC框架,很多前沿的网站都在用。 一般,对于XSS都会进行一定的过滤,比如下面的代码: ...
  • u011721501
  • u011721501
  • 2016-05-26 13:13
  • 2345
    个人资料
    • 访问:242527次
    • 积分:11708
    • 等级:
    • 排名:第1545名
    • 原创:942篇
    • 转载:2篇
    • 译文:0篇
    • 评论:18条
    最新评论