CTF [护网杯 2018]easy_tornado SSTI MD5

Kefira ·
更新时间:2024-11-13
· 583 次阅读

嗯,一直在等学习SSTI后再来搞这个题,最后还是只能学个思路,简单记录下。
在这里插入图片描述
进去以后有三个文件,先点了第一个文件/flag.txt
在这里插入图片描述
提示flag/fllllllllllllag里面,直接访问好了。
在这里插入图片描述
访问完后,出错了,应该是由于文件校验的失败的问题。
在这里插入图片描述
这时候就是第三个文件/hints.txt的作用了。
在这里插入图片描述
告诉了我们filehash的生成方式,同时也带来了新的问题,cookie_secret值是多少。

再结合第二个文件/welcome.txt的提示rend,以及题目的提示tornado
在这里插入图片描述
百度简单搜了下,提示还是非常明显的
在这里插入图片描述
提示用的模板渲染(SSTI),那这个模板在哪,其实这里有点小坑,不注意就会没发现,这个地方其实就在刚刚报错的地方。
在这里插入图片描述
?msg=Error这里传的Error传的也是Error,换一个试试,
在这里插入图片描述
test也是输出test,然后尝试下运算{{2*2}}
在这里插入图片描述
似乎没成功,用了其他的运算符也不行。不过在里面随便输入了点东西,确实是服务器进行了操作的。
在这里插入图片描述
那接下来就是考虑怎么找到cookie_secret

找了下面这些命令执行的payload好像都被过滤掉了

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls").read()') ''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__.values()[13]['eval']('__import__("os").popen("ls").read()') 这两个payload用的是同一个模块,__builtins__模块,eval方法. [].__class__.__base__.__subclasses__()[59].__init__.func_globals['linecache'].__dict__.values()[12].popen('ls').read()

那就只能尝试着直接传cookie_secret相关的参数看是否可以,然后这里查了半天资料还是找不到对应的信息,果然还是不熟悉python框架的web应用,然后就去看writeup了。。
在这里插入图片描述
见识了,原来是这样找到的,难怪之前一直找不到关键点,官方文档。

直接构造payloadhandler.settings
在这里插入图片描述
拿到cookie,然后python运算一下,得出filehash
在这里插入图片描述
还以为结束了,结果报错,这里还是写个python处理下。

import hashlib def md5s(str): m = hashlib.md5() m.update(str.encode("utf8")) return m.hexdigest() if __name__ == '__main__': filename_md5 = md5s("/fllllllllllllag") secret_cookie = "96e69164-12f2-4804-826b-9a4c5b1252d7" filehash = md5s(secret_cookie+filename_md5) print(filehash)

运行结果
在这里插入图片描述
最后成功拿到flag
在这里插入图片描述


作者:baynk



ctf tornado

需要 登录 后方可回复, 如果你还没有账号请 注册新账号