[护网杯 2018]easy_tornado

拿到靶机后先用dirsearch扫描

但是发现全是429(请求超时)

观察页面的三个链接

/flag.txt

说明了flag在/flllllllag路径中

/welcome.txt

结合题目提示的tornado框架

我们可以知道这里利用了tornado的render参数来渲染模板

tornado render是python中的一个渲染函数,也就是一种模板,可以使用不同的参数来访问网页,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。

/hints.txt

结合访问链接后的url

这表示服务器需要验证一个 token(通过 md5(cookie_secret + md5(filename)) 生成)才能访问敏感路径(如 /fllllllllllllag)

如果我们直接访问/fllllllllllllag

寻找注入点

故意写错访问格式找出错误提示

发现注入点在msg

通过访问环境变量找到cookie

Tornado的SSTI(服务端模板注入)漏洞源于其模板引擎对用户输入的无过滤动态渲染。当开发者直接通过render_string()或类似函数将用户输入拼接为模板内容时,攻击者可通过注入模板语法执行任意代码。例如:

漏洞示例代码

class VulnHandler(tornado.web.RequestHandler):

def get(self):

user_input = self.get_argument('param')

self.render_string(f"User Input: {user_input}") # 用户输入直接嵌入模板

若用户输入param={{handler.settings}},则会泄露Tornado应用的配置信息(如cookie_secret),这是典型的SSTI攻击场景。

利用脚本计算token

python 复制代码
import hashlib

cookie_secret = "2afe88af-4f02-4cff-a4fd-a56797dc9d6c"  
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"

获取flag

相关推荐
老前端的功夫9 分钟前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
yaoxin52112336 分钟前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai1 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw01 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
小白学大数据1 小时前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
风之所往_2 小时前
Python 3.0 新特性全面总结
python
2401_882273722 小时前
如何在 CSS 中正确加载本地 JPG 背景图片
jvm·数据库·python
Lucas_coding3 小时前
【Claude Code Router】 Claude Code 兼容 OpenAI 格式 API, Claude code 接入本地部署模型
人工智能·python
测试员周周3 小时前
【AI测试系统】第5篇:从 Archon 看 AI 工程化落地:为什么"确定性编排+AI 弹性智能"是终局?
人工智能·python·测试
大飞记Python4 小时前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python