当前位置: 首页 > news >正文

BUUCTF-web刷题篇(12)

21.easy_tornado

Tornado大致可以分为四个主要组成部分:

一个web框架(包括RequestHandler创建Web应用程序的子类,以及各种支持类)。

HTTPServerHTTP(和AsyncHTTPClient)的客户端和服务器端实现。

一个异步网络库,包括类IOLoop和IOStream,他们充当HTTP组件的构建块,也可用于实现其他协议。

一个协程库(tornado.gen),它允许以比链接回调更直接的方式编写异步代码,这类似于python3.5()中引入的原生协程功能,如果可用,建议使用本机携程代替模块,async deftornado.gen

Tornado Web框架和HTTP服务器一起提供了WSGI的全栈替代方案,WSGIContainer虽然可以将Tornado HTTP服务器用作其他WSGI框架的容器。

打开环境,看到三个文件

第一个文件说明flag文件在/fllllllllllllag里,要考虑怎么进入这个文件。

第二个render是指渲染。

render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。render和template的渲染是相似的,主要区别在于render是以脚本的方式进行渲染,template是以html方式进行渲染。这个重点在于是服务器模板,基本可以确定这是ssti(服务器模板注入),服务器模板注入和sql注入等有相同性,问题的关键在于传参。

另外,还查到了SSTI模板注入

SSTI就是服务器端模板注入(Server-Side Template Injection)

当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的MVC模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。

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

凡是使用模板的地方都可能会出现SSTI问题,SSTI不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模板引擎发现了很大的安全漏洞,然后模板引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模块引擎。

第三个文件提示了哈希编码md5(cookie_secret+md5(filename))

注意看url信息,有两个参数,filename和filehash,filename是文件名的提示,filename=/fllllllllllllag,而filehash是第三个文件的提示,我们在hints.txt中随便改一下filehash的值

发现出错,我们在url中Error随便改一个值

发现msg是可控的,现在我们的主要问题是如何通过msg获得cookie_secret,查到百度的Tornado框架的附属文件handler.settings中存在cookie_secret

查到Tornado提供了一些对象别名来快速访问对象。Handler指向的处理当前这个页面的RequestHandler对象,handler是RequestHandler别名,而上面又提到RequestHandler.settings是self.application.settings的别名。所以handler.settings就等于RequestHandler.application.settings.

构造/error?msg={{handler.settings}},得到cookie_secret

打开md5编码器,按要求格式对其进行加密,

最后在url中构造playload /file?filename=/fllllllllllllag&filehash=61c77fba78f0e2ee2d83eb76d

得到flag

http://www.dtcms.com/a/113293.html

相关文章:

  • 智能体和RPA都需要程序思维,如何使用影刀的变量?
  • HarmonyOS-ArkUI Ability进阶系列-UIAbility与各类Context
  • Python解决“数字插入”问题
  • 英语听力4.5
  • 6547网:蓝桥STEMA考试 Scratch 试卷(2025年3月)
  • Python作业3 字符田字格绘制
  • C语言之标准库中的常用api
  • 必刷算法100题之计算右侧小于当前元素的个数
  • 【算法竞赛】状态压缩型背包问题经典应用(蓝桥杯2019A4分糖果)
  • Linux数据库:【数据库基础】【库的操作】【表的操作】
  • [SAP SD] 常用事务码
  • Linux的/proc/sys/net/ipv6/conf/(all,default,interfaceName具体网络接口名称)/ 笔记250405
  • 国产系统统信uos和麒麟v10在线打开word给表格赋值
  • HTTP查询参数示例(XMLHttpRequest查询参数)(带查询参数的HTTP接口示例——以python flask接口为例)flask查询接口
  • ConstructorResolver
  • Day2-2:前端项目uniapp壁纸实战
  • HashMap 底层原理详解
  • C++学习之LINUX网络编程-套接字通信基础
  • JWT认证服务
  • [MySQL初阶]MySQL(9)事务机制
  • 基于springboot+vue的二手车交易系统
  • Supervisor的安装和使用
  • 0101安装matplotlib_numpy_pandas-报错-python
  • Business English Certificates (BEC) 高频词汇学习
  • 将MATLAB神经网络数据转换为C/C++进行推理计算
  • Linux网络状态监控利器:netstat与ping命令详解
  • Java的Selenium的特殊元素操作与定位之select下拉框
  • RocketMQ初认识
  • C,C++语言缓冲区溢出的产生和预防
  • 【2012】【论文笔记】太赫兹波在非磁化等离子体——