SSTI

最近西湖论剑有一道使用Latte的题目,当时我也是用的偷鸡办法做的,当时时间限制就没有仔仔细细的去寻找逃逸的办法。
Thymeleaf是SpringBoot中的一个模版引擎,个人认为有点类似于Python中的Jinja2,负责渲染前端页面。
SSTI就是攻击者利用原生模板语法将恶意payload注入到可以在服务器端执行的模板中的过程。
再看寻找Python SSTI攻击载荷的过程。
虽然市面上关于SSTI的题大都出在python上,但是这种攻击方式请不要认为只存在于 Python 中,凡是使用模板的地方都可能会出现 SSTI 的问题,SSTI 不属于任何一种语言。
之前也接触过什么是SSTI,但大多以题目进行了解,很多模块以及payload都不了解其意就直接拿过来用,感觉并没有学到什么东西,最主要的是在绕过的过程中,不清楚原理没有办法构造,这次就好好来学习一下原理以及姿势。
SSTI主要是因为某些语言的框架中使用了渲染函数,比如Python中的Flask框架用jinjia2模块内的渲染函数,在不规范的代码中,导致用户可以控制变量并构造恶意的表达式,比如{{98-2}},恶意的表达式未经严格的过滤直接带入模板中渲染执行使得攻击者可以读取文件,远程代码执行等等。
所谓模板注入,又称服务器端模板注入(SSTI),是2015年出现的一类安全漏洞。James Kettle在2015年黑帽大会上进行的演讲,为多个模板引擎的漏洞利用技术奠定了坚实的基础。要想利用这类安全漏洞,需要对相关的模板库或相关的语言有一定程度的了解。
我们在一个名为handlebars的JavaScript模板库上发现了一个0day漏洞,这个漏洞可用于获取Shopify Return Magic应用上的远程代码执行权限。