[护网杯 2018]easy_tornado 1(STTI模板注入+Tornado的secret_cookie)
本文为个人刷题记录,不记录完整步骤,主要记录比较有感触的知识点
SSTI注入
参考:SSTI完全学习
SSTI就是服务器端模板注入(Server-Side Template Injection),也给出了一个注入的概念。
常见的注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,命令注入等等。sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。
sql注入是从用户获得一个输入,然后又后端脚本语言进行数据库查询,所以可以利用输入来拼接我们想要的sql语句,当然现在的sql注入防范做得已经很好了,然而随之而来的是更多的漏洞。
SSTI也是获取了一个输入,然后再后端的渲染处理上进行了语句的拼接,然后执行。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎(下面会提到),主要针对python、php、java的一些网站处理框架,比如Python的jinja2 mako tornado django,php的smarty twig,java的jade velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。
现在网上提起的比较多的是Python的网站。
题目
再来看题,找到了SSTI注入点为
问题是为什么是{{}}(双花括号吖)
不懂就查,官方文档这样说明:
Template expressions are surrounded by double curly braces: {{ … }}. The contents may be any python expression, which will be escaped according to the current autoescape setting and inserted into the output. Other template directives use {% %}
To comment out a section so that it is omitted from the output, surround it with {# … #}.
These tags may be escaped as {{!, {%!, and {#! if you need to include a literal {{, {%, or {# in the output.
就是说{{}}包含的是表达式,下面讲得更清楚
Tornado templates support control statements and expressions. Control statements are surrounded by {% and %}, e.g. {% if len(items) > 2 %}. Expressions are surrounded by {{ and }}, e.g. {{ items[0] }}.
那现在就剩构造{{}}里面的表达式了,看到提示我们secert_cookie,这是什么?
在看了很多文档之后(随便把怎么用tornado搭建网站都看了,最后终于)
别的WP都说这么一句话:
搜素百度得Tornado框架的附属文件handler.settings中存在cookie_secret
完全看不懂吖,不能这么放过去~
原来是与RequestHandler关联的Application对象(Requestion.application)有setting这个属性!
而得到secret_cookie的方法为:error?msg={{handler.settings}}
此题的handler就是指向RequestHandler的对象,至于为什么可以猜到叫handler,我就不是很明白,理论上对象名不是自己取的吗?
tornado.web.Application.settings
最后得到secret_cookie基本答案就出来了,就不继续讲了
感受
今天quick learning了解了Tornado框架,2个小时都过去了,真的够慢的,真希望自己可以学得快点(并且理解到)