[护网杯 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

相关推荐
小小怪75011 分钟前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
Sylvia33.13 分钟前
体育数据API实战:用火星数据实现NBA赛事实时比分与状态同步
java·linux·开发语言·前端·python
QQ86066001618 分钟前
Python基于Vue的”黄山旅游网站的设计与实现 django flask pycharm
vue.js·python·旅游
2401_8442213221 分钟前
使用PictureBox实现图片缩放与显示的深入探讨
jvm·数据库·python·算法
@我漫长的孤独流浪24 分钟前
Python爬虫实战:从入门到精通
开发语言·爬虫·python
05大叔32 分钟前
AI智能伴侣-文件保存 会话的 保存 新建 加载 删除
python
deephub36 分钟前
构建生产级 AI Agent 系统的4大主流技术:反思、工具、规划与多智能体协作
人工智能·python·深度学习·大语言模型·agent
weixin_4629019742 分钟前
在嵌入式设备(ESP32)上构建一套 “局域网内可视化、跨设备兼容” 的硬件控制方案,
python
I love studying!!!1 小时前
python项目: 下载数据
开发语言·python