python模板注入_python SSTI tornado render模板注入

原理

tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。

简单的理解例子如下:

------------------------------------------------------------------------------------

import tornado.ioloop

import tornado.web

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.render('index.html')

class LoginHandler(BaseHandler):

def get(self):

'''

当用户访登录的时候我们就得给他写cookie了,但是这里没有写在哪里写了呢?

在哪里呢?之前写的Handler都是继承的RequestHandler,这次继承的是BaseHandler是自己写的Handler

继承自己的类,在类了加扩展initialize! 在这里我们可以在这里做获取用户cookie或者写cookie都可以在这里做

'''

'''

我们知道LoginHandler对象就是self,我们可不可以self.set_cookie()可不可以self.get_cookie()

'''

# self.set_cookie()

# self.get_cookie()

self.render('login.html', **{'status': ''})

def login(request):

#获取用户输入

login_form = AccountForm.LoginForm(request.POST)

if request.method == 'POST':

#判断用户输入是否合法

if login_form.is_valid():#如果用户输入是合法的

username = request.POST.get('username')

password = request.POST.get('password')

if models.UserInfo.objects.get(username=username) and models.UserInfo.objects.get(username=username).password == password:

request.session['auth_user'] = username

return redirect('/index/')

else:

return render(request,'account/login.html',{'model': login_form,'backend_autherror':'用户名或密码错误'})

else:

error_msg = login_form.errors.as_data()

return render(request,'account/login.html',{'model': login_form,'errors':error_msg})

# 如果登录成功,写入session,跳转index

return render(request, 'account/login.html', {'model': login_form}

-------------------------------------------------------------------------------------

由上面可知:render是一个类似模板的东西,可以使用不同的参数来访问网页

在tornado模板中,存在一些可以访问的快速对象,例如

{{ escape(handler.settings["cookie"]) }}

这两个{{}}和这个字典对象也许大家就看出来了,没错就是这个handler.settings对象

handler 指向RequestHandler

而RequestHandler.settings又指向self.application.settings

所有handler.settings就指向RequestHandler.application.settings了!

大概就是说,这里面就是我们一下环境变量,我们正是从这里获取的cookie_secret

看题目的错误页面

python模板注入_python SSTI tornado render模板注入_第1张图片

可见页面返回的由msg的值决定,修改msg的值形成注入,获得环境变量

?msg={{handler.settings}}  (见上面灰色高显部分)

页面回显环境变量

{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'M)Z.>}{O]lYIp(oW7$dc132uDaK

得到cookie_secret

2018护网杯easy_tornado(SSTI tornado render模板注入)

考点:SSTI注入 原理: tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且 ...

SSTI(模板注入)

SSTI 一. 什么是SSTI 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. ...

SSTI(服务器模板注入)学习

SSTI(服务器模板注入)学习 0x01 SSTI概念 SSTI看到ss两个字母就会想到服务器,常见的还有SSRF(服务器端请求伪造).SSTI就是服务器端模板注入(Server-Side Templ ...

SSTI服务器模板注入(以及关于渲染,solt的学习)&;&;[BJDCTF2020]The mystery of ip 1

ssti服务器模板注入 ssti:利用公共 Web 框架的服务器端模板作为攻击媒介的攻击方式,该攻击利用了嵌入模板的用户输入方式的弱点.SSTI 攻击可以用来找出 Web 应用程序的内容结构. slo ...

python 模板注入

今天学习了python的模板注入,这里自己搭建环境测试以下,参考文章:http://www.freebuf.com/articles/web/136118.html web 程序包括两个文件: fla ...

Flask(Jinja2) 服务端模板注入漏洞(SSTI)

flask Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 wdb 应用程序可以使一些 web 页面.博客.wiki.基于 we ...

CTF SSTI(服务器模板注入)

目录 基础 一些姿势 1.config 2.self 3.[].() 3.url_for, g, request, namespace, lipsum, range, session, dict, g ...

python SSTI利用

原理python的SSTI不仅可以向网页插入一些XSS代码,而且还可以获取一些变量和函数信息,尤其是secret_key,如果获取到则可以对flask框架的session可以进行伪造.对于tornad ...

SSTI-服务端模板注入漏洞

原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露.代码执行.GetShell ...

随机推荐

java基础2.0:Object、Class、克隆、异常编程

Java编程中两个重要的类Object 和 Class及java异常编程 (1)是所有Java类(API提供的类.自定义类)的最终父类. (2)作用:在JVM管理对象中的过程中,有一套统一的类型检查和 ...

codeforces 477A A. Dreamoon and Sums(数学)

题目链接: A. Dreamoon and Sums time limit per test 1.5 seconds memory limit per test 256 megabytes input ...

[C#]递归遍历文件夹

/// /// 递归获取文件夹目录下文件 /// ///

Web工程软件升级之数据库升级(一)

1. 首先检查oracle数据库版本是否正确 (可以使用方法 lsinventory来实现) 2. 检查oracle连接是否成功 3. 解压升级包,放到特定目录 4. 做升级前数据备份,备份主要业务数 ...

Tomcat从零开始(十)Loader

第十课: 不知不觉就10篇blog了,说实话,我是第一次更这么长时间的Blog. 嗯,今天说说Loader,在以前的课程中,也就是内个能使用最初级的servlet的那一节,我们使用了URLClassL ...

SqlParameter关于Like的传参数无效问题

正确的写法(简洁版) private void GetHandleData(string strKeyWord1, string strKeyWord2, string strKeyWord3) { ...

Python验证实现登陆功能以及用户锁定(文件存储)

废话不多说先交代码(只是一个简单的验证):#!/usr/bin/env python #-*- coding:utf8 -*- # Structured program ‘#’是注释 # Functi ...

js中常用的算法排序

在工作中都会经常用到的一些基础算法,可以很快解决问题.这些都是在工作中总结的,希望可以帮助到大家. 一.数组乱序 arr.sort(function randomsort(a, b) { return ...

Bootstrap学习笔记(2)--栅格系统深入学习

你可能感兴趣的:(python模板注入)