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

admin 2022年12月31日14:09:03安全文章评论3 views2780字阅读9分16秒阅读模式

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

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

●阅读语法

●探索环境

●创建攻击



创建自定义的攻击

到目前为止,主要研究了如何通过有记录的漏洞或使用模板引擎中已知的漏洞来构建攻击。

然后,有时需要构建一个自定义的攻击。例如,如果模板引擎在沙箱中执行模板,这就会使得漏洞利用变得更加困难,或是很难被利用。

在确定了攻击面之后,如果没有明显的方法来利用这个漏洞,可以检查每个函数是否存在可利用的行为。通过系统的完成这个过程,有时可以构建一个复杂的攻击,甚至能够攻击更安全的目标。



使用对象链构建一个自定义的漏洞

想前面说的那样,第一步是确定可以访问的对象和方法。

有些对象可能会立即跳出来,通过结合文档中提供的信息,应该能够拼凑出一份希望更深入调查的对象列表。

当研究对象文档时,要特别注意这些对象允许访问哪些方法,以及它们返回哪些对象。

通过深入研究文档,能够发现可以串联的对象和方法的组合。将正确的对象和方法串联起来,有时可以获得最初看起来遥不可及的危险功能和敏感数据的访问。

例如,在基于Java的模板引擎Velocity中,可以访问一个叫做$classClass Tool对象。通过研究文档能够发现,可以通过$class.expect()方法和$class.type属性链来获得对任意对象的引用。这个漏洞已经被利用来在目标系统上执行shell命令,如下所示:

$class.inspect("java.lang.Runtime").type.getRuntime().exec("bad-stuff-here")


场景试验-在沙箱环境下进行服务器端模板注入:

https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-in-a-sandboxed-environment

场景说明:

这个试验场景使用Freemarker模板引擎,由于其沙箱实现的不好,很容易被服务器端模板注入。

试验目的:

要完成这个试验,需要突破沙箱,从carlos的主目录中读取my_password.txt文件,然后提交文件内容。

这个试验提供了一个登录凭证,content-manager:C0nt3ntM4n4g3r

攻击过程:

登录后编辑其中一个产品描述,发现可以访问产品对象

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

                     

通过"Object"类的JavaDoc找到所有对象都可用的方法,可以确认product对象执行${object.getClass()}。浏览文档,找到一个方法调用,可以访问类的静态防范,允许读取文件,比如下面这种:

${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}

在其中一个模板中输入上面的payload并保存

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

在输出的内容中可以看到十进制ASCII码的文件内容

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

对这串ASCII码进行解码,注意是十进制的,可以得到对应的内容,提交后即可完成试验

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



使用开发人员提供的对象构建一个自定义的漏洞

一些模板引擎在默认情况下运行在安全的锁定环境中,以便尽可能减少相关的风险。

尽管这使得利用此类模板进行远程代码执行变得困难,但暴露于模板开发人员创建的对象可以提供进一步、不那么坚固的攻击面。

然后,虽然通常为模板内置程序提供了大量的文档,但网站特定的对象几乎肯定没有任何文档。因此,需要研究如何利用它们需要手动调查网站的行为,以识别攻击面,并相应地构建自己定义的漏洞。

场景试验-使用自定义漏洞进行服务器端模板注入:

https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-with-a-custom-exploit

场景说明:

这个试验场景存在服务器端模板注入的漏洞。

试验目的:

要完成这个试验,需要创建自定义漏洞,从carlos的主目录中删除文件/.ssh/id_rsa

这个试验提供了一个登录凭证,wiener:peter

攻击过程:

登录后看到可以设置首选名字,通过这个可以访问user对象

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

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

下面还有个上传头像的地方,当我们上传一个非图片的文件可以看到出现报错信息。这个消息公开了一个名为user.setAvatar()的方法,另外还注意到文件路径是/home/carlos/User.php

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

上传一个可用的头像,随后在某个页面提交一条评论,后面会经常刷新这条评论

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

把前面提交首先名字的POST请求发送给Repeater,修改blog-post-author-display参数后面的值,如下面这种,并发送这个请求:

user.setAvatar('/etc/passwd','image/jpg')

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

在读取文件前,需要刷新下发过评论的那个页面,随后通过GET /avatar?avatar=wiener返回的响应,可以读到/etc/passwd的文件内容,说明通过这种方法可以访问任意文件

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

重复刚才的过程,读取前面报错的/home/carlos/User.php这个文件,记得刷新下发表过评论的页面

user.setAvatar('/home/carlos/User.php','image/jpg')

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

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

在返回的PHP文件中,有个gdprDelete()函数,这个函数可以删除用户的头像,我们可以结合这些信息来删除carlos的文件

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

先把需要删除的文件按照前面的步骤进行更新,记得刷新下留有评论的blog

user.setAvatar('/home/carlos/.ssh/id_rsa','image/jpg')

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

再调用user.gdprDelete()方法,刷新下评论即可完成本试验

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


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


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

文件上传漏洞-概念梳理

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

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

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

身份验证漏洞-概念梳理

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

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

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

发表评论

匿名网友 填写信息

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