本文介绍: 模版注入就是存在web应用中的注入漏洞例如:如果使用模板显示用户输入,那么它是完全安全的,因为我们所做的只是从数据库获取当前用户信息然后将其返回用户,但下面这个例子就不太一样了:如果用户的输入的成为模板的一部分,就构成了ssti漏洞,因为模板能力执行任意代码,所以用户可以服务器上获得一个shell攻击者可以在其中注入恶意模板代码来获得shell,但需要注意的一点是,该漏洞不仅限于服务器,只要模板可用漏洞可以存在于任何地方。

 打开题目

打开flag.txt

告诉我们flag在 /fllllllllllllag

打开welcome.txt

我们看到render渲染函数联想ssti

打开hints.txt

然后我们留意到每个打开url上面都有filehash

告诉我们如果想要访问/fllllllllllllag下的flag文件,是需要filehash这个GET参数需要mad5加密filename(也就是/fllllllllllllag)与cookie_secretmd5加密才能访问最终的flag值
我们要想办法获取cookie_secret的值

我们将URL上的文件名修改替换为/fllllllllllllag试试

得到如下界面

提示?msg=Error

url上的修改为?msg=/fllllllllllllag

但是我们随便写内容都能在页面回显

包括我们加上{{}},模板注入必须通过传输型如{{xxx}}的执行命令

我们知道handler.settings内置环境配置信息名称

所以访问一下得到cookie_secret

cookie_secret: 1beaa4a8-aee4-4b8f-8b56-63b60cf13c24

这里需要注意的是三个url上的filehash都是小写字母

接下来我们构造payload就行

注意选择是32位小写

先是md5(filename)

接下来md5(cookie_secret+md5(filename))

1beaa4a8-aee4-4b8f-8b56-63b60cf13c24+3bf9f6cf685a6dd8defadabfb41a03a1

去掉加号加密得到78503f8a3e173f0546c4d6f35a52b713

组合一下得到payload

file?filename=/fllllllllllllag&filehash=78503f8a3e173f0546c4d6f35a52b713

得到flag

这里看到别的师傅wp上用python脚本加密

这里借用一下师傅的

import hashlib  #选用哈希模块
filename = '/fllllllllllllag'  #文件名
cookie_secret = '76fc62a3-fea5-46ab-8f95-4b7262246f8c'#cookie_secret值
filename = hashlib.md5(filename.encode()).hexdigest()#/fllllllllllllag进行32位小写哈希md5加密
a = cookie_secret + filename#md5值进行拼接
filehash = hashlib.md5(a.encode()).hexdigest()#计算拼接后的md5值的md532小写的值
print(filehash)#输出加密后的md532位小写的值

知识点

render 函数模板template) 都是用来创建 html 模板的,Vue 推荐在绝大多数情况下使用模板template)来创建你的 HTML

template是一种类HTML的语法,它定义组件结构展示,包括HTML标签属性事件插值等。Vuetemplate编译成render函数,最终将render函数染成虚拟DOM,并将其渲染页面上。

render函数则是一个函数式组件,它的参数是一个createElement函数和上下文对象。render函数用代码方式描述组件的结构和展示,并返回一个虚拟DOM节点,最终也会被渲染页面上。

相对template,render函数更加灵活和强大,可以更精细地控制组件展示。同时,由于render函数是JavaScript代码,因此它可以更好集成到其他代码中。template则更加容易编写理解,但可能会受到HTML标签属性限制

在实际开发中,我们可以选择使用template或render函数来定义组件,具体取决于组件需求开发者的习惯。如果组件需要较为复杂展示逻辑动态交互可以使用render函数来实现。如果组件比较简单可以使用template编写
 

模版注入就是存在web应用中的注入漏洞,例如:

template = “Bio: {{ user.bio }}”
render(template)

如果使用此模板显示用户的输入,那么它是完全安全的,因为我们所做的只是从数据库获取当前用户的信息,然后将其返回给用户,但下面这个例子就不太一样了:

template = “Bio:  ” + USER_INPUT
render(template)

如果用户的输入的成为模板的一部分,就构成了ssti漏洞,因为模板有能力执行任意代码,所以用户可以服务器上获得一个shell攻击者可以在其中注入恶意模板代码来获得shell,但需要注意的一点是,该漏洞不仅限于服务器,只要模板可用,漏洞就可以存在于任何地方
 

C#(StringTemplate,Sharepoint动态使用的ASPX)。

Java(Velocity、Freemarker、Pebble、Thymeleaf和Jinjava)

PHP(Twig、Smarty、Dwoo、Volt、Blade、Plates、Mustache、Python、Jinja2、Tornadomustache和String Template)。

Go (text/template)

cookie_secretApplication对象settings的属性中 ,访问它的话就需要知道它的属性名字

self.application.settings有一个别名RequestHandler.settings

其中handler又是指向处理当前这个页面RequestHandler对象

RequestHandler.settings指向self.application.settings

因此handler.settings指向RequestHandler.application.settings

    在tornado模板中,存在一些可以访问快速对象,这里用到的是handler.settingshandler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里就是我们的一些环境变量

    简单理解handler.settings即可,可以把它理解为tornado模板中内置环境配置信息名称通过handler.settings可以访问环境配置的一些信息,看到tornado模板基本上可以通过handler.settings一把梭

收获:

1.了解到md5加密python脚本

2.了解到handler.settings是tornado框架的环境配置文件

3.了解到模板注入必须通过传输型如{{xxx}}的执行命令

知识点源于:

buuctf easy-tornado(cookie_secret)_-栀蓝-的博客-CSDN博客

详解模板注入漏洞(上)_程序猿DD_的博客-CSDN博客

服务端模板注入攻击原理以及实战(SSTI)_服务器端模板注入-CSDN博客

原文地址:https://blog.csdn.net/m0_75178803/article/details/134704729

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48254.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注