吸取了长城杯的教训,学习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初见的更多相关文章

  1. python+jinja2实现接口数据批量生成工具

    在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢. 答案是肯定的! ...

  2. Python Jinja2 Template: YAML File Cisco Example Tutorial

    原文链接:http://networkbit.ch/python-jinja-template/ template.txt如下: hostname {{ name }} interface Loopb ...

  3. python安装二进制k8s高可用 版本1.13.0

    一.所有安装包.脚本.脚本说明.下载链接:https://pan.baidu.com/s/1kHaesJJuMQ5cG-O_nvljtg 提取码:kkv6 二.脚本安装说明 1.脚本说明: 本实验为三 ...

  4. Saltstack数据系统Grains和Pillar(三)

    Saltstack数据系统 分为Grains和Pillar 一.Grains 静态数据,当Minion启动的时候收集的MInion本地的相关信息.(包含操作系统版本.内核版本.CPU.内存.硬盘.设备 ...

  5. APM环境搭建

    权限设置 把用户添加到用户组 “dialout”(如果这步没做,会导致很多用户权限问题): sudo usermod -a -G dialout $USER   然后注销后,重新登录,因为重新登录后所 ...

  6. flask-windows部署

    由于supervisor不支持windows,但要防止程序异常中断,所以需要采取措施 通过pywin32,使得flask以服务的方式运行 创建pythonservice.py import win32 ...

  7. 1. SSTI(模板注入)漏洞(入门篇)

    好久没更新博客了,现在主要在作源码审计相关工作,在工作中也遇到了各种语言导致的一些SSTI,今天就来大概说一下SSTI模板注入这个老生常谈的漏洞 前言 模板引擎 模板引擎(这里特指用于Web开发的模板 ...

  8. 学习saltstack (六)

    Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/  (介绍各操作系统安装方法) centos 6源 ? 1 y ...

  9. [BJDCTF2020]Cookie is so stable-1|SSTI注入

    1.打开之后在各个界面查看源代码,未发现很明显的有用信息,仅发现了提示,结果如下: 2.尝试输入数据,结果就是输入什么就回显什么,也未进行过滤,尝试进行sql注入失败,结果如下: 3.那就根据提示抓包 ...

随机推荐

  1. Java动态代理底层实现

    Java实现源码 上一节我们提到了Java动态代理的使用,接下来我们看一下他的具体实现. HelloInterface proxyHello = (HelloInterface) Proxy.newP ...

  2. Appium问题解决方案(6)- Java堆栈错误:java.lag.ClassNotFoundException:org.eclipse.swt.widets.Control

    背景 运行脚本出现 SWT folder '..\lib\location of your Java installation.' does not exist. Please set ANDROID ...

  3. node.js一头雾水

    开始学习node.js,一头雾水,谁可以告诉我怎么学......欢迎评论留言怎么学node.js的,谢谢 node,node,node,给自己加油 放一张自己设计的日历图鼓励一下:):):),加油.. ...

  4. MySql WorkBench通过表生成表关系图

    1.mysql workbench 菜单file=>add model(添加模型) 点击上面的add diagram(添加新的图解),就会在右边多出一个新的图解模型 2,mysql workbe ...

  5. Jmeter系列(14)- Setup与tearDown线程组

    与普通线程组区别 #Setup线程组:在普通线程组执⾏前触发 #tearDown线程组:在普通线程组执⾏后触发 线程组属性配置详情完全⼀致 使⽤策略建议 #Setup 线程组 – 压测执⾏准备阶段,准 ...

  6. windows 根据 端口号 找到进程ID PID

    List process by port number netstat -ano | findstr 8080 Proto Local Address Foreign Address State PI ...

  7. JMeter主要元件

    配置元件 http cookie管理器 http信息头管理器 http请求默认值 统一管理 快速切换测试环境 http cache管理器 静态资源 监听器元件 查看结果树 分析查看某个请求的详情 请求 ...

  8. python序列类型及一些操作

    序列分类 1.按存放的数据类型分类: 容器类型(能存放不同类型的数据):list.tuple.coolections.deque 扁平序列(只能存放一种类型的数据):str.bytes.bytearr ...

  9. whistle手机抓包(以安卓手机为例)

    环境:whistle:1.14.6 whistle手机抓包 以安卓手机为例 手机跟电脑要连同一个wifi. 1.启动whistle 使用w2 start启动whistle. 退出cmd后,whistl ...

  10. Kafka分区策略

    Kafka分区策略 所谓分区策略是决定生产者将消息发送到哪个分区的算法.Kafka 为我们提供了默认的分区策略,同时它也支持你自定义分区策略. 常见的分区策略包含以下几种:轮询策略.随机策略 .按消息 ...