Server-side template injection (SSTI)学习笔记

本文是关于Server-side Template Injection (SSTI)的学习笔记,通过burp suite在线安全学院的多个实验,详细介绍了SSTI的基本概念、模板语法、安全隐患、已知漏洞利用和自定义攻击的构建。作者通过ERB、Tornado等模板引擎的实例,展示了如何利用SSTI执行任意代码、信息泄露和文件操作,强调了开发人员提供的对象和自定义攻击策略的重要性。
摘要由CSDN通过智能技术生成

笔者burpsuite的在线安全学院的ssti学习笔记。文章质量不是很高,假如有看到的大佬轻喷,很多地方是Google翻译的。这是burrpsuite学院的地址

阅读文档

文档是最有用的信息来源,例如,一旦您知道正在使用基于Python的Mako模板引擎,实现远程代码执行就可以很简单

<%
import os
x=os.popen('id').read()
%>
${x}

在无沙盒环境中,实现远程代码执行并将其用于读取,编辑或删除任意文件在许多常见模板引擎中都同样简单。

了解基本模板语法

Lab: Basic server-side template injection

基于ERB模板的ssti,要解决此问题,请查看ERB文档以了解如何执行任意代码,然后morale.txt从Carlos的主目录中删除该文件。

  1. 当查看有关第一个产品的详细信息时,GET请求将使用message参数呈现"Unfortunately this product is out of stock"
    在这里插入图片描述
  2. 在ERB文档中,发现该语法<%= someExpression %>用于评估表达式并将结果呈现在页面上
  3. 使用ERB模板语法创建包含数学运算的测试payload,例如:<%= 7*7 %> ,然后url编码payload再请求
    在这里插入图片描述
  4. Ruby文档中的system()方法,该方法可用于执行任意操作系统命令
  5. …省略一些尝试
  6. 构造payload以删除Carlos的文件,如下所示:<%= system("rm /home/carlos/morale.txt") %>,url编码一下就是 https://your-lab-id.web-security-academy.net/?message=<%25+system("rm+/home/carlos/morale.txt")+%25>
  7. 成功后,lab会有提示在这里插入图片描述

Lab: Basic server-side template injection (code context)

Tornado模板的ssti,要解决此问题,请查看Tornado文档以发现如何执行任意代码,然后morale.txt从Carlos的主目录中删除该文件。
username = wiener
password = peter
提示:请仔细查看“首选名称”功能。

  1. 通过Burp代理流量时,登录并在其中一篇博客文章上发表评论。
  2. 注意到,在“我的帐户”页面上,您可以选择是否要网站使用您的全名,名字或昵称。当您提交您的选择,一个POST请求设置参数的值blog-post-author-display要么user.name,user.first_name或user.nickname。当加载包含评论的页面时,评论上方的名称将根据该参数的当前值进行更新。在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. 在Burp中,转到“代理”>“ HTTP历史记录”,找到设置此参数的请求POST /my-account/change-blog-post-author-display,然后将其发送到Burp Repeater。
  2. 研究Tornado文档,发现模板表达式用双花括号包围,例如{ {someExpression}}。在Burp Repeater中,请注意,您可以转出表达式并按如下所示注入任意模板语法:blog-post-author-display=user.name}}{ {7*7}}在这里插入图片描述
    https://www.tornadoweb.org/en/stable/template.html
    在这里插入图片描述
    在这里插入图片描述
  3. 重新加载包含您的测试注释的页面。请注意,用户名现在Peter Wiener49}}显示为,表明代码上下文中可能存在服务器端模板注入漏洞。回头看评论区,发现被计算。在这里插入图片描述
  4. 在Tornado文档中,确定用于执行任意Python的语法:{% somePython %}
  5. 学习Python文档,发现通过导入os模块,您可以使用该system()方法执行任意系统命令。结合这些知识来构造可删除Carlos文件的有效负载:{% import os %}{ {os.system('rm /home/carlos/morale.txt')
  6. 在Burp Repeater中,返回POST /my-account/change-blog-post-author-display。中断表达式,然后将有效负载注入参数中,记住对URL进行如下编码:blog-post-author-display=user.name}}{%25+import+os+%25}{ {os.system('rm%20/home/carlos/morale.txt')</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值