今天又看到了一道这样的题,之前一直都学不明白的东西

反反复复给你看的时候,就想搞明白了。

我们做题的,需要知道flask是怎么运行的就行了。



这个就是一个最简单的flask应用,当我们访问的时候,就会显示hello world的字样。

flask之所以安全是因为他是靠渲染的flask的渲染方法有render_template和render_template_string两种。

大的不用懂,我们这样理解,写一个py文件,来带动html来显示页面就行。

和正常的html不同的是,这个页面是靠py文件来驱使的。



但这个时候,我们就又迷糊了,如果html要传个参数什么的,该怎么写?



就是这样。

重点就是{{}}在Jinja2中作为变量包裹标识符。

模板注入

不正确的使用flask中的render_template_string方法会引发SSTI。



这个code是用户可控的,那就可以传入xss代码和后面的html代码拼接,造成xss。

但是我们改一下



这样把我们传的参数放入 render_template_string中。就会被默认转义了。

了解了漏洞形成的原因,但是我们怎么在CTF利用中。

遇到ssti就先传参,看看什么模板

再看看这道题

我去。。拉了拉了,看不明白了。

一个个看吧。

app.config[‘FLAG’] = os.environ.pop(‘FLAG’),这样的话{{config}}可查看所有app.config内容,但是config被加入了黑名单,但是在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。

代码将 () 替换为空字符,还把config和self加入了黑名单。

return返回的就是你的参数给你做了一些限制后的参数

config 对象:

config 对象就是Flask的config对象,也就是 app.config 对象。

{{ config.SQLALCHEMY_DATABASE_URI }}

虽然有过滤但python还有一些内置函数,比如url_for和get_flashed_messages

url_for()作用:

(1)给指定的函数构造 URL。

(2)访问静态文件(CSS / JavaScript 等)。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。

get_flashed_messages方法: 返回之前在Flask中通过 flash() 传入的信息列表。

再找到可以利用的内置函数,直接冲就行了。

payload:

{{url_for.globals[‘current_app’].config[‘FLAG’]}}

{{get_flashed_messages.globals[‘current_app’].config[‘FLAG’]}}

CTF-flask模板注入学习的更多相关文章

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

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

  2. Flask模板注入

    Flask模板注入 Flask模板注入漏洞属于经典的SSTI(服务器模板注入漏洞). Flask案例 一个简单的Flask应用案例: from flask import Flask,render_te ...

  3. Flask模板_学习笔记

    代码尽在我的github上面:https://github.com/521xueweihan 概述:    在Flask中,Jinja2默认配置如下:        A.扩展名为.html,.htm, ...

  4. 关于flask的模板注入的学习

    flask模板注入的学习 关于flask模版注入,之前不太理解,看了很多文章才弄懂,主要原理就是渲染函数的参数用户可控就造成了模板注入 就会使用户构造恶意的代码进行逃逸从而进行攻击 flask模板渲染 ...

  5. CTF SSTI(服务器模板注入)

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

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

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

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

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

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

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

  9. SSTI(模板注入)

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

随机推荐

  1. mac 中一些日常小问题与快捷键

    1.备忘录中的中英文符号问题 比如:在备忘录中使用英文符号时,总是会被自动的修改为中文符号 解决方法:系统偏好设置-键盘-文本,去选"使用智能引号和存折号" p.p1 { marg ...

  2. Acunetix在SDLC中的安全性测试

    DevOps只是害怕尝试新事物.它们用于Selenium测试,这些测试占用了管道并提供了难以解释的结果,但是与此同时,它们经常避开了DAST测试,这远没有那么麻烦. 由于他们的应用程序是完全用Java ...

  3. 长按短按控制LED灯-ESP32中断处理

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include "freertos ...

  4. Qt绘图浅析与实例

    1. Qt5位置相关函数 Q提供了很多关于获取窗体位置及显示区域大小的函数,如x().y()和pos().rect().size().geometry()等,统称为"位置相关函数" ...

  5. kong配置upstream实现简单的负载均衡

    目录 通过konga实现 1. 配置upstream 2. 配置Service发布 3. 配置Route,匹配规则 4. 验证结果 通过 Kong Admin API实现 1. 配置upstream ...

  6. Django基础06篇 分页

    1.导入Django自带的分页类 from django.core.paginator import Paginator 2.分页类的使用 def index(request): # return H ...

  7. 泛型(8)-Java7的"菱形"语法与泛型构造器

    正如泛型方法允许在方法签名中声明泛型形参一样,Java也允许在构造器签名中声明泛型形参,这样就产生了所谓的泛型构造器. package com.j1803;class Foo{ public < ...

  8. 锁屏面试题百日百刷-java大厂八股文(day3)

    为了有针对性的准备面试,锁屏面试题百日百刷开始每日从各处收集的面经中选择几道经典面试题分享并给出答案供参考,答案中会做与题目相关的扩展,并且可能会抛出一定问题供思考.这些题目我会标注具体的公司.招聘类 ...

  9. SpringBoot之了解自动配置原理

    承接上文: import注解的使用: 作用:引用时,容器自动创建出这填写的类型的组件,默认组件的名字就是全类名. 往容器中添加两个组件 @Import({User.class, DBHelper.cl ...

  10. Spring事务管理中的配置文件(三)

    在开发中,遇到了sql语句报错,但是并没有回滚的情况. 经过几天的排查,终于找到了事务没有回滚的原因. 原来的项目用的是informix的数据库,原来针对事务回滚的机制都是好用的.我本地用的是mysq ...