tornado模版注入 [护网杯 2018]easy_tornado 1

2023-11-30 15:20

本文主要是介绍tornado模版注入 [护网杯 2018]easy_tornado 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 打开题目

打开flag.txt

告诉我们flag在 /fllllllllllllag下

打开welcome.txt

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

打开hints.txt

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

告诉我们如果想要访问/fllllllllllllag下的flag文件,是需要filehash这个GET参数需要被mad5加密的filename(也就是/fllllllllllllag)与cookie_secret的md5加密才能访问最终的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函数

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

template是一种类HTML的语法,它定义了组件的结构和展示,包括HTML标签、属性、事件和插值等。Vue将template编译成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、Tornado、mustache和String Template)。

Go (text/template)

  • tornado框架特点

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博客

这篇关于tornado模版注入 [护网杯 2018]easy_tornado 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437536

相关文章

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

PHP防止SQL注入详解及防范

SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞。 一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。 对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的

PHP防止SQL注入的方法(2)

如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子: $unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')"); 这是因为用户可以输入类似VALUE”); DROP TA

PHP防止SQL注入的方法(1)

(1)mysql_real_escape_string – 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 使用方法如下: $sql = "select count(*) as ctr from users where username ='".mysql_real_escape_string($username)."' and password='". mysql_r

Go 依赖注入库dig

简介 今天我们来介绍 Go 语言的一个依赖注入(DI)库——dig。dig 是 uber 开源的库。Java 依赖注入的库有很多,相信即使不是做 Java 开发的童鞋也听过大名鼎鼎的 Spring。相比庞大的 Spring,dig 很小巧,实现和使用都比较简洁。 快速使用 第三方库需要先安装,由于我们的示例中使用了前面介绍的go-ini和go-flags,这两个库也需要安装: $ go g