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

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

我们做题的,需要知道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. Kotlin Coroutine(协程): 二、初识协程

    @ 目录 前言 一.初识协程 1.runBlocking: 阻塞协程 2.launch: 创建协程 3.Job 4.coroutineScope 5.协程取消 6.协程超时 7.async 并行任务 ...

  2. JMeter之BeanShell常用内置对象

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  3. 史上最强Tableau Server 安装教程

    前言 本文介绍的是单节点部署Tableau Server. 安装前 1.Tableau Server 的单节点安装的最低硬件推荐配置: 处理器: 64 位 必须支持 SSE4.2 和 POPCNT 指 ...

  4. 「CF505E」 Mr. Kitayuta vs. Bamboos

    「CF505E」 Mr. Kitayuta vs. Bamboos 传送门 如果没有每轮只能进行 \(k\) 次修改的限制或者没有竹子长度必须大于 \(0\) 的限制那么直接贪心就完事了. 但是很遗憾 ...

  5. Qt5双缓冲机制与实例

    1. 双缓冲机制 所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上. 在早期的Qt版本中,若直接在控件上进行绘制工作,则在控件重绘时会产生闪烁的现象, ...

  6. Collection集合工具类

    Ⅷ.Collections 工具类 java.util.Collections Collections 集合工具类,用来对集合进行操作,部分重要方法如下: 1.public static <T& ...

  7. Swift-为什么String转换Int的结果是nil

    摘要 知其然,更要知其所以然.前段时间用 String 转换 Int 处理时,发现一种情况返回 nil,就换成 String 转换 Double 的方式处理.今天就要来看看这种返回 nil 的情况是怎 ...

  8. 关于Xpath定位方法知道这些基本够用

    一.写在前面 之前写过一些关于元素定位的文章,但是感觉都是很碎片,现在想做个整合,便有了这篇文章. 二.xpath的定位方法 关于xpath定位方法,网上写的已经很成熟了,现已百度首页为例,如下图: ...

  9. 42 张图带你撸完 MySQL 优化

    Hey guys,这里是程序员cxuan,欢迎你阅读我最新一期的文章,这篇文章是 MySQL 调优的汇总版,我加了一下日常开发过程中的调优经验,希望对各位小伙伴们有所帮助.下面开始正文. 一般传统互联 ...

  10. Hive开发要知道数据仓库的四个层次设计

    数据仓库:数据仓库全面接收源系统数据,ETL进程对数据进行规范化.验证.清洗,并最终装载进入数据集市,通过数据集市支持系统进行数据查询.分析,整个数据仓库包含四大层次. 1.数据仓库的四个操作    ...