[护网杯 2018]easy_tornado

打开靶场页面除了三个超链接似乎没有别的线索,我们先点击这几个超链接看看有什么提示

这个说真正的flag在/fllllllllllllag文件中

结合题目的名字Tornado的render模板渲染引擎,可能存在SSTI漏洞

这个给出了filehash的公式所以我们现在要找到cookie_secret

然后拼接在file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))

后端代码在处理 /error 路由时,通常会接收一个名为 msg 的参数,用来向用户展示错误提示信息

tornado 模板引擎的语法规定,双大括号 {{ ... }} 内部的内容会被当作 Python 表达式执行并输出。因此,当你输入 {{ ... }} 时,服务器会去计算括号里面的 Python 代码

在 Tornado 模板中,handler 是一个内置的全局变量,它指向当前处理该 HTTP 请求的 RequestHandler 实例。通过它,模板可以访问到当前请求的所有上下文信息

RequestHandler 实例持有一个 settings 属性,它对应的是整个 Tornado 应用初始化时传入的全局配置字典

在 Tornado 中,像 cookie_secret(用于 Cookie 加密签名的密钥)、debug 模式等全局配置,都是存放在这个 settings 字典里的

基于这几点我们可以开始构造payload:/error?msg={{handler.settings}}

得到cookie_secret

接着使用python脚本来得到filehash

python 复制代码
import hashlib

cookie_secret = "c0796d82-a2c4-4615-a7da-3d9e326c58fd"
filename = "/fllllllllllllag"

# 计算 md5(filename)
md5_filename = hashlib.md5(filename.encode()).hexdigest()

# 计算 token
token = hashlib.md5((cookie_secret + md5_filename).encode()).hexdigest()
print(f"token = {token}")  # 例如: "d41d8cd98f00b204e9800998ecf8427e"
相关推荐
全栈弄潮儿1 小时前
Python实战第13期:模块与包
后端·python·编程语言
2401_885885042 小时前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
Dev _2 小时前
Python解释器安装在系统级目录导致命令行用户‌没有权限‌向该目录写入文件
开发语言·python
Dev _3 小时前
PyCharm旧进程仍在后台运行,导致新实例无法启动或连接
ide·python·pycharm
quantdash_cc4 小时前
如何检查滚动收益率计算中的窗口长度不足?——从数学定义到 Pandas 实现
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
砚底藏山河4 小时前
python量化:实时行情WebSocket断线重连状态机
java·python·websocket·金融
CodeGL4 小时前
16、Python Web开发
开发语言·前端·python
加点盐4 小时前
别再用 configparser 了:给本地配置加上加密、校验和版本迁移
python
小嘉丶学长5 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节