1. 题目背景与初步分析
这道来自护网杯2018的题目名为"easy_tornado",从名称就能看出它考察的是Tornado框架相关的安全知识。Tornado是一个Python编写的非阻塞式Web服务器框架,在CTF比赛中经常作为服务端模板注入(SSTI)漏洞的载体出现。
初次接触这类题目时,我们需要建立几个关键认知:
- Tornado框架使用Python语言编写,这意味着如果存在SSTI漏洞,注入的也是Python代码
- Tornado的模板语法使用双大括号
{{}}包裹变量或表达式 - 题目名称中的"easy"提示解法不会过于复杂,但需要熟悉Tornado的特有对象和方法
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 信息收集与漏洞定位
2.1 初始页面分析
访问题目提供的Web服务,首页显示了三个可点击的链接。这是典型的CTF题目设计模式,每个链接都可能隐藏着关键信息。在实际渗透测试中,这种设计相当于网站的"功能点",我们需要逐一测试每个功能。
通过点击测试发现两个重要信息:
/file路径下存在文件读取功能/error路径会返回错误消息,且消息内容可通过msg参数控制
提示:在CTF比赛中,任何用户可控的输入点都可能是漏洞入口,特别是能够直接输出内容的位置。
2.2 Cookie信息检查
通过Burp Suite等工具拦截请求,检查HTTP头部信息是Web安全测试的标准操作。虽然初步检查未发现明显可利用的Cookie,但这一步不能省略,因为:
- 某些CTF题目会设置特殊的Cookie作为验证机制
- 真实环境中,Cookie往往是身份认证的关键
3. SSTI漏洞利用
3.1 发现注入点
在/error路径测试msg参数时,发现其输出内容直接反映在页面上。尝试输入{{7*7}}等基本SSTI测试payload,确认存在模板注入漏洞。
Tornado框架的模板注入与Flask等框架有所不同,它的内置对象和方法有自己的特点。其中最关键的是handler.settings,这是Tornado特有的一个字典,包含应用程序的配置信息。
3.2 handler.settings详解
在Tornado框架中:
handler是`tornado.web.RequestHan
