buu两道SSTI
buu两道SSTI
1.题目:
2.过程:
Web_python_template_injection
进入题目,只有一个页面……随便访问一个:
得到配置
这里简单的lipsum方法似乎不行……在不确定的情况下,可以用模板支持的python语句进行遍历:
1 | {% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__ == 'catch_warnings' %}{{c.__init__.func_globals['linecache'].__dict__['os'].popen('ls').read()}}{% endif %}{% endfor %} |
找到指定的模块并运用即可:
获得flag
shrine
进入题目发现给了python的源码:
1 | import flask |
设置了一个flask对象:app flag大概是被设置到对象的配置文件中
路由中有:/shrine/<path:shrine>
访问并查看源码:
SSTI……blaklist
相当于:+s
还会替换 ‘(‘ 和 ‘)’ ……
这里要注意,config是flask中的变量,记录了整个配置信息。set config=None仅仅是使得此方法无法使用,而不是替换’config‘为’None‘,所以 会返回None。我们仍有其他方法访问config。
1 {{self.__dict__}}也可以得到config,只是同样被禁用了……Flask特有的变量和函数
config | request | session | url_for() | get_flashed_messages()
详细方法:https://blog.csdn.net/enjolras_fuu/article/details/82229073
1 | 在url_for.__globals__中,我们可以找到有关app配置的模块current_app |
或许这种情况应该在这些函数中翻一翻相关的文件……就能找到方法
获得flag
两道题是不同的考点,都是基础……
学习了……