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

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)

''

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

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

例子: 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 = 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下变量的能力。

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

>>> 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的Flask框架标配模板引擎Jinja2的使用教程深入解析Python的Tornado框架中内置的模板引擎为Python的Tornado框架配置使用Jinja2模板引擎的方法Python的Flask框架中的Jinja2模板引擎学习教程Python Web开发模板引擎优缺点总结python Django模板的使用方法(图文)基于python实现微信模板消息常用python编程模板汇总Python的Django框架中模板碎片缓存简介Python实现的简单模板引擎功能示例

python模板注入_Python 模板引擎的注入问题分析相关推荐

  1. python模板注入_Python模板注入(SSTI)深入学习

    前言 一直对模板注入似懂非懂的,打算在这篇文章中深入的研究一下模板注入以及在ctf中bypass的办法. Learning 什么是模板&模板注入 小学的时候拿别人的好词好句,套在我们自己的作文 ...

  2. python注入_python的常见命令注入威胁

    ah!其实没有标题说的那么严重! 不过下面可是我们开发产品初期的一些血淋淋的案例,更多的安全威胁可以看看北北同学的<python hack>PPT,里面提及了不只命令执行的威胁,那些都是我 ...

  3. python渲染光线_python模板渲染配置文件

    python的mako.jinja2模板库,确实好用!这里做个笔记,好记性不如烂笔头. #!/usr/bin/env python #encoding=utf-8 import sys,yaml    ...

  4. python template模块_Python模板库Mako的用法

    Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django.Jinja2等等. 基本用法 创建模板并渲染它的最基本的方法是使用 Template 类: from  ...

  5. python注入_Python如何考虑代码注入安全?

    使用ast.literal_eval(), 只允许使用 string,bytes,number,tuples,lists,discts,set,booleans,None ast.literal_ev ...

  6. pythonsql注入_python使用mysql,sql注入问题

    python使用mysql importpymysql conn=pymysql.connect( host= '127.0.0.1', #连接地址 port = 3306, #端口 user = r ...

  7. python内存数据库触发器_Python内存数据库/引擎

    初探 在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较 Pythonic 的方式进行数据库的操作(比如说插入和查询). 举个具体的例子,分别向数据库 db 中插 ...

  8. python 参数解析_python的函数对参数解析分析

    以下转自其它博客.觉得总结得太好了,所以拿来自己参考一下. python中函数参数的传递是通过赋值来传递的. 函数参数的使用又有俩个方面值得注意: 1.函数参数是如何定义的 2.在调用函数的过程中参数 ...

  9. python哨兵循环_Python通用循环的构造方法实例分析

    本文实例讲述了python通用循环的构造方法.分享给大家供大家参考,具体如下: 1.交互循环 是无限循环的一种,允许用户通过交互的方式程序的特定部分: def main(): sum =0.0 cou ...

  10. python raise语句_python中异常报错的分析处理

    想必到现在经过python基础的学习之后,小伙伴们都已经开始写很多脚本了,有大的有小的,但是有的时候并不是所写的能够顺利跑出结果来,期间会有不但的报错以及异常,很多我们都不理解,所以也就不会修改,这是 ...

最新文章

  1. 最新汇总!这些高校已确定开学时间!
  2. List集合中的对象根据属性排序
  3. Android中的Android中的Surface和SurfaceView
  4. Mui Webview下来刷新上拉加载实现
  5. VR 技术加上 8K 画质! 2016 年里约奥运会亮点十足
  6. android按钮固定尺寸,如何在android中保持按钮的固定宽高比
  7. swift 3.0 中使用 xib
  8. 小波变换和motion信号处理(二)【转载】
  9. android flutter mac,android flutter mac 开发环境变量配置
  10. echarts 中国地图,tooltip,legend同时显示多组数据
  11. 对话框ModifyStyle(0, WS_MINIMIZEBOX)最小化按钮无效的解决方法
  12. Astah Professional for Mac(UML建模工具)
  13. SonarQube代码质量管理平台 的安装、配置与使用
  14. 阿里云商标注册教程:新手自助申请详细步骤
  15. 如何检查java代码有误_Java代码查错题
  16. 扫地机器人水箱背景_一种扫地机器人的水箱结构的制作方法
  17. python连乘函数_python 连乘
  18. 萨缪尔森微观经济学第19版真题和课后答案
  19. linux修改sda3时间,Linux服务器磁盘占满问题解决(/dev/sda3 满了)
  20. 杨锦鑫:美元重返95,欧元绝地反扑

热门文章

  1. 19.12添加自定义监控项目19.13/19.14 配置邮件告警19.15 测试告警19.16 不发邮件的问题处理...
  2. makefile函数集锦【转】
  3. Android Studio建立百度地图步骤及导航无语音解决方法
  4. 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
  5. PHP程序员40点陋习
  6. 给予redis和zookeeper的分布式锁
  7. 共享变量在线程间的可见性
  8. linux 内存优化
  9. 原工信部副部长杨学山:重基础,促创新,求实效,转观念
  10. 《HTML5+CSS3网页设计入门必读》——1.11 小结