python模板注入_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方法相关
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 模板引擎的注入问题分析相关推荐
- python模板注入_Python模板注入(SSTI)深入学习
前言 一直对模板注入似懂非懂的,打算在这篇文章中深入的研究一下模板注入以及在ctf中bypass的办法. Learning 什么是模板&模板注入 小学的时候拿别人的好词好句,套在我们自己的作文 ...
- python注入_python的常见命令注入威胁
ah!其实没有标题说的那么严重! 不过下面可是我们开发产品初期的一些血淋淋的案例,更多的安全威胁可以看看北北同学的<python hack>PPT,里面提及了不只命令执行的威胁,那些都是我 ...
- python渲染光线_python模板渲染配置文件
python的mako.jinja2模板库,确实好用!这里做个笔记,好记性不如烂笔头. #!/usr/bin/env python #encoding=utf-8 import sys,yaml ...
- python template模块_Python模板库Mako的用法
Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django.Jinja2等等. 基本用法 创建模板并渲染它的最基本的方法是使用 Template 类: from ...
- python注入_Python如何考虑代码注入安全?
使用ast.literal_eval(), 只允许使用 string,bytes,number,tuples,lists,discts,set,booleans,None ast.literal_ev ...
- pythonsql注入_python使用mysql,sql注入问题
python使用mysql importpymysql conn=pymysql.connect( host= '127.0.0.1', #连接地址 port = 3306, #端口 user = r ...
- python内存数据库触发器_Python内存数据库/引擎
初探 在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较 Pythonic 的方式进行数据库的操作(比如说插入和查询). 举个具体的例子,分别向数据库 db 中插 ...
- python 参数解析_python的函数对参数解析分析
以下转自其它博客.觉得总结得太好了,所以拿来自己参考一下. python中函数参数的传递是通过赋值来传递的. 函数参数的使用又有俩个方面值得注意: 1.函数参数是如何定义的 2.在调用函数的过程中参数 ...
- python哨兵循环_Python通用循环的构造方法实例分析
本文实例讲述了python通用循环的构造方法.分享给大家供大家参考,具体如下: 1.交互循环 是无限循环的一种,允许用户通过交互的方式程序的特定部分: def main(): sum =0.0 cou ...
- python raise语句_python中异常报错的分析处理
想必到现在经过python基础的学习之后,小伙伴们都已经开始写很多脚本了,有大的有小的,但是有的时候并不是所写的能够顺利跑出结果来,期间会有不但的报错以及异常,很多我们都不理解,所以也就不会修改,这是 ...
最新文章
- 最新汇总!这些高校已确定开学时间!
- List集合中的对象根据属性排序
- Android中的Android中的Surface和SurfaceView
- Mui Webview下来刷新上拉加载实现
- VR 技术加上 8K 画质! 2016 年里约奥运会亮点十足
- android按钮固定尺寸,如何在android中保持按钮的固定宽高比
- swift 3.0 中使用 xib
- 小波变换和motion信号处理(二)【转载】
- android flutter mac,android flutter mac 开发环境变量配置
- echarts 中国地图,tooltip,legend同时显示多组数据
- 对话框ModifyStyle(0, WS_MINIMIZEBOX)最小化按钮无效的解决方法
- Astah Professional for Mac(UML建模工具)
- SonarQube代码质量管理平台 的安装、配置与使用
- 阿里云商标注册教程:新手自助申请详细步骤
- 如何检查java代码有误_Java代码查错题
- 扫地机器人水箱背景_一种扫地机器人的水箱结构的制作方法
- python连乘函数_python 连乘
- 萨缪尔森微观经济学第19版真题和课后答案
- linux修改sda3时间,Linux服务器磁盘占满问题解决(/dev/sda3 满了)
- 杨锦鑫:美元重返95,欧元绝地反扑
热门文章
- 19.12添加自定义监控项目19.13/19.14 配置邮件告警19.15 测试告警19.16 不发邮件的问题处理...
- makefile函数集锦【转】
- Android Studio建立百度地图步骤及导航无语音解决方法
- 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
- PHP程序员40点陋习
- 给予redis和zookeeper的分布式锁
- 共享变量在线程间的可见性
- linux 内存优化
- 原工信部副部长杨学山:重基础,促创新,求实效,转观念
- 《HTML5+CSS3网页设计入门必读》——1.11 小结