服务器端模板注入(SSTI)-攻击示例(一)

admin 2022年12月24日11:25:37安全文章评论3 views2395字阅读7分59秒阅读模式

在本节中,将更仔细地研究一些典型的服务器端模板注入漏洞,并演示如何来利用它们。通过实践,可以潜在的发现并利用各种不同的服务器端模板注入漏洞。

一旦发现了服务器端模板注入漏洞,并确定了正在使用的模板引擎,一次成功的利用通常包含下面的过程步骤:

●阅读语法

●探索环境

●创建攻击



阅读语法

除非对模板引擎了如指掌,否则阅读它的文档通常是第一步。虽然这可能不是花费时间的最令人兴奋的方式,但重要的是不要低估文档可以成为很多有用的信息来源。

学习基本语法以及关键函数和变量处理显然很重要,即使是学习如何在模板中嵌入本地代码这样简单的事情,有时也会很快导致漏洞的出现。例如,一旦知道正在使用基于PythonMako模板引擎,实现远程代码执行可能就很简单。

在一个没有沙盒的环境中,实现远程代码执行并利用它来读取、编辑或删除任意文件,在许多常见的模板引擎中也非常简单。


场景试验-基本的服务器端模板注入:

https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic

场景说明:

这个试验场景由于ERB模板的不安全构造,容易受到服务前端模板注入的影响。

试验目的:

要完成这个试验,需要查阅ERB文档,找出执行任意代码的方法,然后从carlos的主目录中删除moral.txt文件。

攻击过程:

选择查看第一产品的更多细节时,GET请求使用message参数在主页上呈现"Unfortunately this product is out of stock"

服务器端模板注入(SSTI)-攻击示例(一)

                  

ERB文档中可以发现语法<%= someExpression %>是用来计算一个表达式并在页面上呈现结果,可以使用ERB模板语法创建包含数学运算的payload,比如:

<%= 7*7 %>

把这个payloadURL编码后放入message作为参数,可以注意到页面上呈现的不是消息,而是数学运算结果,表明可能存在服务器端模板注入漏洞

https://YOUR-LAB-ID.web-security-academy.net/?message=<%25%3d+7*7+%25>

服务器端模板注入(SSTI)-攻击示例(一)


Ruby的文档中,也说明system()方法,可以用来执行任意的操作系统指令。可以构建恶意payload来删除carlos的文件:

<%=system("rm /home/carlos/morale.txt" ) %>

对上面这个payload进行URL编码,将其作为message的参数放入URL,访问后即可完成试验

https://YOUR-LAB-ID.web-security-academy.net/?message=<%25+system("rm+/home/carlos/morale.txt")+%25>

服务器端模板注入(SSTI)-攻击示例(一)


场景试验-基本的服务器端模板注入(代码环境):

https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic

场景说明:

这个试验场景由于使用Tornado模板的方式不安全,容易受到服务器端末班注入的影响。

试验目的:

要完成这个试验,需要查阅Tornado文档,了解如何执行任意代码,然后从carlos的主目录中删除moral.txt文件。

试验提供一个登录账号,wiener:peter

攻击过程:

用所提供的账号登录后,可以看到有个设置"Preferred name"的地方,可以选择"Name""First Name""Nickname"来进行展示

服务器端模板注入(SSTI)-攻击示例(一)

当提交选择时,一个POST请求将参数blog-post-author-display的值设置为user.nameuser.first_name、或user.nickname,当加载包含这个账户的评论页面时,评论上面的名字会根据这个参数的当前值来更新,把这个请求发送给Repeater

服务器端模板注入(SSTI)-攻击示例(一)

Tornado文档中规定,模板表达式是用双大括号包围的,比如{{someExpression}},我们修改下这个请求"blog-post-author-display"后面的参数

blog-post-author-display=user.first_name}}{{7*7}}

服务器端模板注入(SSTI)-攻击示例(一)

随便找个帖子,在下面回帖,随后查看下留言,可以看到用户名这里前面注入算式被运算了,说明这个位置存在模板注入

服务器端模板注入(SSTI)-攻击示例(一)

Tornado中可以通过{% somePython %}来执行Python,因此可以通过导入os模块使用system()方法执行任意的系统命令,构建如下恶意payload

{% import os %}{{os.system('rm /home/carlos/morale.txt')


还是在前面那个请求中,将恶意payload在经过URL编码后替换到"blog-post-author-display"的后面

blog-post-author-display=user.name}}{%25+import+os+%25}{{os.system('rm%20/home/carlos/morale.txt')

服务器端模板注入(SSTI)-攻击示例(一)

发送这个请求后,再次刷新这个账号进行评论过的帖子,即可完成此试验。


服务器端模板注入(SSTI)-攻击示例(一)


服务器端请求伪造(SSRF)-概念梳理

文件上传漏洞-概念梳理

访问控制和权限提升漏洞-概念梳理

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

命令注入攻击(上)
目录遍历攻击(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理



原文始发于微信公众号(H君网安白话):服务器端模板注入(SSTI)-攻击示例(一)

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月24日11:25:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  服务器端模板注入(SSTI)-攻击示例(一) http://cn-sec.com/archives/1479975.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: