python SSTI tornado render模块注入
最近刷到了[护网杯 2018]easy_tornado这道题,学习一下tornado模块注入吧。
0X01 原理
tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果对render内容可控,就可以进行xss注入,通过{{}}进行传递变量和执行表达式。
1 | import tornado.template |
该段代码将定义一个TEMPLATE变量作为一个模板文件,然后使用传入的name替换模板中的”FOO”,在进行加载模板并输出,且未对name值进行安全检查输入情况。
简单输出
XSS
模板注入
执行一个运算
执行代码,获取该目录下的文件,使用readlines可获取文件所有内容。
1 | {%import os%}{{os.popen("whoami").read()}} |
执行命令
1 | {%import os%}{{os.popen("whoami").read()}} |
在这里不知为什么不能同时使用{{}},而是在引入模块需使用{%%},在使用{{}}引入会导致语法错误,暂不深究了。
0X02 通过查找相应的资料{%%}和{{}}的用途上如下。
{%%}
主要用于循环语句和条件语言以及自定义类的执行
{{}}}
用来对模块变量的使用和模块过滤器的使用
- 本文作者: y0lo
- 本文链接: http://example.com/2020/11/30/tornado模块注入/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!