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基础的学习之后,小伙伴们都已经开始写很多脚本了,有大的有小的,但是有的时候并不是所写的能够顺利跑出结果来,期间会有不但的报错以及异常,很多我们都不理解,所以也就不会修改,这是 ...
最新文章
- 2008软考网络工程师题
- Linux下搭建FTP服务器笔记
- 机器学习问题总结(01)
- ZZULIOJ 1126: 布尔矩阵的奇偶性
- Vue3脚手架安装vue @/cli
- ASP.NET Session的七点认识
- phpstrpos不存在_深入理解PHP之strpos
- html回调函数,JS 回调函数
- 每天一个小技巧(新建桌面)
- 【计算广告】边际成本的妙用
- 流程表结构设计第一版
- 【产品人生】<基础认知>产品分析方法产品体验分析报告撰写
- 怎样隐藏计算机中的文件夹,电脑上的文件夹不想被别人看到怎么办?如何隐藏电脑文件夹?-电脑文件夹怎么加密...
- 全球与中国云监控软件市场深度研究分析报告(2021)
- 搭建vue前端脚手架
- 关于点进Steam页面白屏解决办法
- 回顾LIGO之父的传奇人生,这次他会再失诺贝尔物理学奖吗?
- 历史性时刻,Python要成为TIOBE编程语言榜首?
- python全盘搜索文件_python实现全盘扫描搜索功能的方法
- 智能车自动控制快速停车_控制您的智能手机的自动照片上传