python jinja2初见
吸取了长城杯的教训,学习python-web迫在眉睫。
正常难度的python_template_injection,由于现在没学面向对象,理解原理比较困难,所以先使用简单版复现;并附上正常版的常用payload。
part1:操作
服务端代码:

测试payload1:
效果:
网页回显无意义。
测试payload2:

效果:
网页回显无意义。
测试payload3:


网页无回显。


网页无回显。

本地回显同上;同样的回显也出现在网页。

part2:浅层原理
name=request.args.get('name','guest')获取名为name的get参数;若无该参数,则将name赋值为'guest'(可能不准确,但测试的是这个效果)
jinja2是一个灵活的模板系统;模板可以理解为渲染。(反正我都不知道是啥)
在jinja2中,控制结构需要以{% %}包裹,变量取值需要以 {{}}包裹。
所以,我们在payload加入这些语法后,jinja2就不会把这些东西渲染为简单的字符串,而是去执行。
要想在jinja2模板中执行python代码,需要在模板环境中注册函数。上述代码中,为降低难度,已经将os模块注册(t.globals['os']=os)
os.system()将字符串转化成命令在服务器运行。
字符串传入时,会被url编码,但测试发现&符号不会被编码;故需要用%26替代。(测了好久才发现问题在这o(╥﹏╥)o)
每个system语句执行时均会创建一个子进程,system语句之间不具有连续性。若想连续执行,需要用【;】分割字符串
在网上查阅资料知,system返回值是状态码0,1,2;popen可以返回输出内容。
但实际测试的时候,system返回过256、512;popen还报错。
最后通过os.popen().read()解决了问题。
一般的,服务端代码不会import os。
故需构造payload:【任意命令执行】
{{__class__.__mro__[x(须获得object类)].__subclasses__()[71].__init__.__globals__['os'].popen('任意系统命令').read()}}
参考:https://xuanxuanblingbling.github.io/ctf/web/2019/01/02/python/
python jinja2初见的更多相关文章
- python+jinja2实现接口数据批量生成工具
在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢. 答案是肯定的! ...
- Python Jinja2 Template: YAML File Cisco Example Tutorial
原文链接:http://networkbit.ch/python-jinja-template/ template.txt如下: hostname {{ name }} interface Loopb ...
- python安装二进制k8s高可用 版本1.13.0
一.所有安装包.脚本.脚本说明.下载链接:https://pan.baidu.com/s/1kHaesJJuMQ5cG-O_nvljtg 提取码:kkv6 二.脚本安装说明 1.脚本说明: 本实验为三 ...
- Saltstack数据系统Grains和Pillar(三)
Saltstack数据系统 分为Grains和Pillar 一.Grains 静态数据,当Minion启动的时候收集的MInion本地的相关信息.(包含操作系统版本.内核版本.CPU.内存.硬盘.设备 ...
- APM环境搭建
权限设置 把用户添加到用户组 “dialout”(如果这步没做,会导致很多用户权限问题): sudo usermod -a -G dialout $USER 然后注销后,重新登录,因为重新登录后所 ...
- flask-windows部署
由于supervisor不支持windows,但要防止程序异常中断,所以需要采取措施 通过pywin32,使得flask以服务的方式运行 创建pythonservice.py import win32 ...
- 1. SSTI(模板注入)漏洞(入门篇)
好久没更新博客了,现在主要在作源码审计相关工作,在工作中也遇到了各种语言导致的一些SSTI,今天就来大概说一下SSTI模板注入这个老生常谈的漏洞 前言 模板引擎 模板引擎(这里特指用于Web开发的模板 ...
- 学习saltstack (六)
Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/ (介绍各操作系统安装方法) centos 6源 ? 1 y ...
- [BJDCTF2020]Cookie is so stable-1|SSTI注入
1.打开之后在各个界面查看源代码,未发现很明显的有用信息,仅发现了提示,结果如下: 2.尝试输入数据,结果就是输入什么就回显什么,也未进行过滤,尝试进行sql注入失败,结果如下: 3.那就根据提示抓包 ...
随机推荐
- Spring系列之Mybatis动态代理实现全过程?回答正确率不到1%
面试中,可能会问到Spring怎么绑定Mapper接口和SQL语句的.一般的答案是Spring会为Mapper生成一个代理类,调用的时候实际调用的是代理类的实现.但是如果被追问代理类实现的细节,很多同 ...
- noip模拟42
A. 卷 发现乘积足以爆 \(long\) \(long\),但是数据随机,可以略忽略精度问题 一个快速降低数的级别的方法是取对数,由于有性质 \(log(x * y)=logx+logy\),合并时 ...
- NOI2021 游记
day -10 开始一天一场NoIP模拟赛,前几场每天挂分很厉害(这么说是因为后面的以前做过) 自省选惨挂以后国赛的知识点就几乎没怎么摸过了,考前发现连manacher都不会写了,反演?又陷入&quo ...
- Webpack:打包项目报错(eslint: debugger)
打包项目需要把项目中的debugger删除,否则会报错.
- finally方法体
1.资源释放 java7可以在try(创建资源对象,方法体结束之后自动释放) 2.finally中有返回
- python关键字--yield
彻底理解Python中的yield
- 使用Redis Stream来做消息队列和在Asp.Net Core中的实现
写在前面 我一直以来使用redis的时候,很多低烈度需求(并发要求不是很高)需要用到消息队列的时候,在项目本身已经使用了Redis的情况下都想直接用Redis来做消息队列,而不想引入新的服务,kafk ...
- 第23篇-虚拟机对象操作指令之getstatic
Java虚拟机规范中定义的对象操作相关的字节码指令如下表所示. 0xb2 getstatic 获取指定类的静态域,并将其值压入栈顶 0xb3 putstatic 为指定的类的静态域赋值 0xb4 ge ...
- JavaScrip中 Array.reduce()
数组的方法 reduce() reduce方法在数组的每一项元素上都会执行回调函数. 语法:array.reduce( callBack [ , init] ) // 语法arrary.reduce ...
- php发送邮件方法-亲测可用,email.class.php过期解决办法
php虽然提供了mail()函数,但并不好用,而PHPMailer是一个不错的邮件发送工具,使用起来也是非常简单!使用PHPMailer发送邮件: <?php header("cont ...