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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网协议区别

今天面试的时候被面试官问到内网隧道技术中的协议有什么区别,平时只注重使用不注重原理,学习记录 2023-11-30 网络层:IPV6 隧道、ICMP 隧道、GRE 隧道 传输层:TCP 隧道、UDP 隧道、常规端口转发 应用层:SSH 隧道、HTTP…

【双向链表的实现】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 双向链表的结构 2. 双向链表的实现 2.1 头文件 ——双向链表的创建及功能函数的定义 2.2 源文件 ——双向链表的功能函数的实现 2.3 源文件 ——双向链表功能的…

工业APP1+X证书笔记

第一套 选择题 操作题一 let AbstractTrigger require(AbstractTrigger);class MyTrigger extends AbstractTrigger {execute(context,param){let bookDetail{bookCode:"1001",cnt:10,bookName:"中国上下五千年",bookAuth:"墨人",bookDate:&qu…

web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)

题目 打开页面显示如下 只有这个页面能打开 显示如下 用dirsearch扫一下 查看了一下,发现没什么用 查看页面源代码 返回了,写入的参数,猜测可能有文件包含漏洞 用php伪协议读取文件 构造payload ?pagephp://filter/readconvert.base64-en…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube,是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 声明式配置语法: kubectl create/apply/delete -f xx…

动态规划--整数拆分

题目描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解释…

APITable免费开源的多维表格与可视化数据库本地部署公网远程访问

APITable免费开源的多维表格与可视化数据库公网远程访问 文章目录 APITable免费开源的多维表格与可视化数据库公网远程访问前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c…

20个Python源码项目下载

20个很不错的Python项目源码,其中包括适合毕业设计的项目。这些资源中涵盖了Django 3版本的项目: DjangoMysqlBulma实现的商场管理系统源码 PythonDjango实现基于人脸识别的门禁管理系统 PythonFlaskMySQL实现的学生培养计划管理系统 Python大熊猫主题人…

【超全】C++速查手册:面向对象与继承多态

C速查手册 C 类和对象 面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠…

树与二叉树堆:经典OJ题集

目录 查找值为x的结点: 思路分析: 单值二叉树: 示例: 思路分析: 相同的树: 示例: 思路分析: 二叉树的前序遍历:——使用前序遍历把结点元素放入数组中 题…

架构的模式

文章目录 🔊博主介绍🥤本文内容📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

继承中的析构函数的权限的深入了解

如果一个父类中的析构函数如果设置为 private 权限 ,一个子类public继承了这个父类,那么 这个父类可以创建对象吗? 答案是 不可以 看看下面的代码 class A { public:private:~A() {} };class B :public A {A a; // 这个地方编译不报错&…