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.那就根据提示抓包 ...
随机推荐
- Zookeeper:进大厂不得不学的分布式协同利器!
大家好,我是冰河~~ 最近,有很多小伙伴让我更新一些Zookeeper的文章,正好也趁着清明假期把之前自己工作过程当中总结的Zookeeper知识点梳理了一番,打算写一个[精通Zookeeper系列] ...
- K8S集群架构的组件组成
1.Master--主控节点 (1)apiserver:集群统一入口,以restful的方式,交给etcd存储 (2)scheduler:节点调度,选择node节点应用部署 (3)controller ...
- shell脚本测试变量是否为空,测试文件是否存在,sed修改配置文件参数,分支语句
Shell脚本 1. 基本的几个变量 使用$?获取最近一次的执行结果: 使用$#获取传递的参数个数,类似C语言中的int argc; 使用$@获取所有的传参,类似C语言的char **argv 2. ...
- systemctl添加自定义系统服务
[Service] Type=forking ExecStart=绝对路径 ExecStop=绝对路径 ExecReload=绝对路径 以上最精简版,文件/usr/lib/systemd/system ...
- CentOS安装oh-my-zsh并配置语法高亮和命令自动补全
安装zsh 和 oh-my-zsh 安装zsh yum install zsh 安装git yum install git 切换默认shell chsh -s /bin/zsh clone from ...
- [闻缺陷则喜]关于boost的想法
公司有个大约2万行的项目,用到了boost,我想取消掉不用boost.理由:一,可理解性差,除了高手很难弄懂.二,类太多,光头文件就1万多.大点的团队四五个高手,每人用一个boost类.高手流失后,很 ...
- php环境 安装
php 相关 wget https://www.php.net/distributions/php-7.2.16.tar.gz //你可以官网获取最新的包 tar解压 //一般目录 ...
- flask项目在Linux运行
依赖安装: 1.flask 2.flask_sqlalchemy --需要安装flask-mysqldb 安装时提示mysql_config not found ,使用:yum install my ...
- P6657-[模板]LGV 引理
正题 题目链接:https://www.luogu.com.cn/problem/P6657 题目大意 给出$n\times n$的棋盘,$m$个起点第$i$个为$(1,a_i)$,对应$m$个终点第 ...
- 深入浅出WPF-09.Command(命令)
命令 1)命令系统的基本元素 命令(Command),WPF的命令实际上就是实现了ICommand接口的类,平时使用最多的是RoutedCommand类 命令源(Command Source),即命令 ...