服务端模板注入攻击 (SSTI)【BUUCTF easy_tornado】

一、模板注入原理

服务端模板注入:和常见Web注入 的成因一样,也是服务端接收了用户的输入,将其作为  Web 应用模板内容  的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。

主要用到的是render渲染函数,简单说意思就是 找到模板文件,进行渲染,从而显示页面。详细参考:render函数

如:

$twig = new Twig_Environment(new Twig_Loader_String());  // Twig是php里面的一个模板引擎

$output = $twig->render("Hello {$_GET['name']}");  // 将用户输入作为模版内容的一部分

echo $output;   //输出在网页上

输入payload:?name={{2*10}},拼接后就是hello {{2*10}},将会在在网页上显示: hello 20

 

攻击者不仅仅能插入 JavaScript 脚本,而且还可以通过{{ }}进行传递变量和执行简单的表达式。

 

二、模板注入检测

手工:

如果服务端将 用户的输入 作为了 模板的一部分,那么在页面渲染时也必定会将用户输入的内容进行 模版编译和解析 最后输出。同常规的 SQL 注入检测,XSS 检测一样,模板注入漏洞的检测也是向 传递的参数中承载特定 Payload 并根据 返回的内容 来进行判断的。若承载的 Payload 得到编译解析,则存在对应SSTI。

每一个模板引擎都有着自己的语法,Payload 的构造需要针对各类模板引擎制定其不同的扫描规则,就如同 SQL 注入中有着不同的数据库类型一样。

服务端模板注入攻击 (SSTI)【BUUCTF easy_tornado】_第1张图片

工具:

tqlmap(基于python)

下载地址

 

 三、CTF题

题目地址:https://buuoj.cn/challenges  easy_tornado

1、进去有三个文档:

服务端模板注入攻击 (SSTI)【BUUCTF easy_tornado】_第2张图片

分别是:

2、/flag.txt    ,提示flag在/fllllllllllllag中这是一个目录。

 

3、/welcome.txt    ,题目名字中的tornado 是python中的一个框架,所以此处自然是python中的渲染函数啦,php中也有这个函数。由这个函数可以联想到模板注入漏洞了。

 

4、/hint.txt    我们可以猜到filename就是目录/fllllllllllllag,那cookie_secret是什么呢?我们现在目的就是找到它。

 

5、上文提到了/fllllllllllllag这个目录,我们去看看有什么

服务端模板注入攻击 (SSTI)【BUUCTF easy_tornado】_第3张图片

由此,进一步猜测存在模板注入漏洞,我们用模板引擎语法测试一下,果然存在模板注入漏洞

服务端模板注入攻击 (SSTI)【BUUCTF easy_tornado】_第4张图片

6、经了解,tornado里面存在一个附属文件handler.settings,里面有cookie_secret这个参数,我们把它拼接上去

得到了cookie_secret的值。

 

7、接下来算md5的值了,filename的md5:7253bf9f6cf685a6dd8defadabfb41a03a1  ,再拼接上cookie_secret的值去算md5:md5(7253bf9f6cf685a6dd8defadabfb41a03a1)=11c9af821275edbd73cc3dbcbf399a78

就简单写到这了,看到有大佬博客里写到 在python中执行命令 要调用OS模块....有待进一步学习.......

参考文章:https://www.freebuf.com/vuls/83999.html

你可能感兴趣的:(CTF合集)