什么是模板:

模板引擎用于使用动态数据呈现内容。此上下文数据通常由用户控制并由

模板进行格式化,以生成网页、电子邮件等。模板引擎通过使用代码构造

(如条件语句、循环等)处理上下文数据,允许在模板中使用强大的语言

表达式,以呈现动态内容。如果攻击者能够控制要呈现的模板,则他们将

能够注入可暴露上下文数据,甚至在服务器上运行任意命令的表达式。

flask:

Flask是一个使用 Python 编写的轻量级 Web 应用框架。模板引擎则使用 Jinja2,学习python模板注入就要先弄清flask的工作流程。Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上。

模板引擎(这里特指用于Web开发的模板引擎):

简单来说是为了使 用户界面(html文件)与业务数据(视图函数)分离而产生的,它可以使得代码的可读性增强并容易理解与维护.

类(基类子类):

Python3把所有的功能、函数等都封装在类里面 如str类下封装着与字符串相关的功能 如split()等 list类封装着与列表相关的功能 如append()等而这些类全都继承一个基类:object类 而我们之前说的那些模块 就属于object的子类,继承的作用就是子类继承了一个父类 就可以使用父类的一些方法。

如何利用模板注入这一个漏洞:

python中,我们最终的目的是为了绕过python终端 进入服务端的系统 然后使用系统命令达到我们的目的(找flag)所以 在python中 你也得知道一些基本姿势 其实就是通过python语言来对系统进行操作

os.popen()方法用于从一个命令打开一个管道

(popen()返回的是一个文件对象 里面放着执行命令后返回的内容

通过.read()方式读出)这就是一个简单的绕过python终端 使用系统

命令的例子

利用:

我们要解决的是如何利用ssti漏洞达os.popen(‘catflag’).read()的目的直接在{{}}里加import os再os.popen(‘catflag’).read()是不可以的,其实我们并不是只能通过 ‘import os‘ 才能使用os库的相关函数 一些模块里存在和‘import os‘这个表达式作用相同的函数,同样可以引用os库从而使用os库的函数 而这些模块存在于python内部文件中我们只需要找到这些模块所在位置 然后通过这些模块来使用函数也可以达到绕过终端 执行系统命令的目的,我们需要使用一些特殊的方法。

模板注入题目的思路:

jinja2模板中的表达语句{{…}}模板注入,{{…}}中的会当做命令执行,我们需要采用自带的模块和基类调用我们需要的函数,输入参数等。绕过的时候注意是python2还是python3 不同形式的python3中可能不存在一些库

如:

python两对{}包裹的会被当做命令执行,我们可以来读取文件等可以简单的用于测试是否存在模板注入 {{9-3}}会返回6, 则可执行在Jinja2模板引擎中。

{{}}是变量包裹标识符。{{}}并不仅仅可以传递变量,还可以执行一些简单的表达式注意 对象要使用jinjia2的{{}}能使用的对象 就是python的数据类型 如字符串 列表等。

1.class

返回一个实例所属的类

mro 返回当前对象的所有父类

或base 返回当前对象的父类

base和mro都是用来寻找基类的

3.subclasses()

是一个内置方法,获取一个类所有的子类,返回值是一个列表

4.init 类的初始化方法

5.globals 对包含函数全局变量的字典的引用

6.利用{{ config.items() }}可以查看服务器的配置信息

获取基类的几种方法:

[].class.base”.class.mro[2]

().class.base

{}.class.base

request.class.mro[8]  或者 [].class.bases[0]

之后我们开始寻找我们可用的子类ssti的主要目的就是从这么多的子类中找出可以利用的类(一般是指读写文件的类)加以利用。

如:我们可以利用的方法有等 (file是的40号)。

().class.base.subclasses()40.read()

//用file的方式读取了etc/passwd里的信息

寻找可用的子类(脚本遍历):

读写文件:

可以直接调用system函数

().class.base.subclasses([71].init.globals[‘os’].system(‘ls’)

或者

().class.base.subclasses([71].init.globals[‘os’].listdir(‘.’) //读取本级目录

一道题目(攻防世界Web_python_template_injection):

可以看到目录列表

运用file()40号就读取到了fl4g的内容。

python template injection_月末总结(python模板注入)相关推荐

  1. web python template injection_[Day 2] Template Injection:欸不是,你真的懂 Python 嗎?

    雖然標題是寫 Template Injection,但我們暫時先從另外一個角度切入八 owo)/ 小 sandbox(? 這邊有一段簡單的 Python 2 程式碼 while True: try: ...

  2. python内存注入代码_Python模板注入

    Python模板注入 近期遇到Python模板注入问题,故在此整理,便于后期回顾. 1 什么是"模板注入" 首先什么是"Python模板"呢?Python有很多 ...

  3. python 模板注入_SSTI模板注入

    前言 又划水了一天,最后划累了学习了一会,写了这篇文章,又遇到的hexo遇见花括号解析错误的问题,一点点把文章断点才解决(hexo断点调试 SSTI介绍 SSTI,服务端模板注入攻击,发生在MVA框架 ...

  4. python模板注入_BUUCTF/护网杯 easy_tornado 模板注入

    首先简单认识一下模板注入 模板注入涉及的是服务端Web应用使用模板引擎渲染用户请求的过程,这里我们使用 PHP 模版引擎 Twig 作为例子来说明模板注入产生的原理.考虑下面这段代码: require ...

  5. python模板注入_Python模板注入(SSTI)深入学习

    前言 一直对模板注入似懂非懂的,打算在这篇文章中深入的研究一下模板注入以及在ctf中bypass的办法. Learning 什么是模板&模板注入 小学的时候拿别人的好词好句,套在我们自己的作文 ...

  6. python template模块_Python模板库Mako的用法

    Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django.Jinja2等等. 基本用法 创建模板并渲染它的最基本的方法是使用 Template 类: from  ...

  7. Python flask渲染模板注入

    2018-TokyoWesterns-Web-shrine 参考链接: https://blog.csdn.net/Onlyone_1314/article/details/121875761 imp ...

  8. python中括号配对检测_使用模板匹配在Python上进行对象检测!(附代码)

    了解如何在没有机器学习或任何框架的情况下在Python上进行对象检测 每当我们听说" 对象检测 "时,我们就会想到机器学习以及不同的框架.但是我们实际上可以在不使用机器学习或任何其 ...

  9. web python template injection_XCTF Web_python_template_injection

    一.进入实验发现是python的模板注入 1.我们先来了解一下: instance.__class__ 可以获取当前实例的类对象 class.__mro__ 获取当前类对象的所有继承类 每一个新式类都 ...

  10. python后台架构Django教程——templates模板

    全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...

最新文章

  1. Git 技术篇 - 同步代码到github失败,提示non-fast-forward、error: failed to push some refs to问题解决方法,git pull的用法
  2. 王爽汇编语言实验7一个很好的解法(转)
  3. PaddlePaddle, TensorFlow, MXNet, Caffe2 , PyTorch五大深度学习框架2017-10最新评测
  4. java retry(重试) spring retry, guava retrying 详解
  5. jQuery插件备忘
  6. 纳税服务系统【角色与用户】
  7. GitHub 回应突然断供:身不由己,无权提前通知预警
  8. Android系统Recovery工作原理之使用update.zip升级过程分析(四)
  9. Rust : ? 操作符(待续)
  10. STM8S——Analog/digital converter (ADC)
  11. 软考历程(4)——安全问题之病毒
  12. 现代通信原理思维导图--第五章 模拟调制系统
  13. 约束优化内罚函数c语言程序,约束优化惩罚函数法.pdf
  14. 删除文件出现“文件正在使用或正在打开”
  15. unity游戏开发毕设_毕设分享:用Unity探究2D游戏的打击感
  16. fullpage插件的使用
  17. SylixOS ECS 启动过程
  18. Camtasia2022升级最新中文版 2022电脑录屏神器
  19. 转载:“技术支持工程师”薪资行情
  20. I.MX6 Linux mipi配置数据合成

热门文章

  1. 方舟怎么看服务器信息,方舟怎么看服务器ip地址
  2. 25 | 业务安全体系:对比基础安全,业务安全有哪些不同?
  3. 研发团队管理经验总结(持续更新... ...)
  4. ISBN 国际标准书号
  5. Codeforces Beta Round #94 (Div. 1 Only)A. Statues
  6. RabbitMQ问题解决:TCP connection succeeded but Erlang distribution failed
  7. php实现幻灯片效果,flash幻灯片切换效果代码,超简单超实用
  8. 干货|Python基础入门 课程笔记(三)
  9. 我对硬盘MBR、DBR、BPB、FAT和FDT的理解
  10. vba 连接mysql 引用_Excel VBA连接MySql 数据库获取数据