攻防世界Web_shrine
题目:
给的是源代码,整理一下如下:
看到jinjia flask,render_template_string猜测到这题应该是考查python模板注入。
代码分析可以得到以下信息:
1.路径在 /shrine/ 下
2.将()都用空格替换 所以通过render()渲染函数方式失效。这里的方式是适用内置函数:get_flashed_messages(), url_for()
3.黑名单有config,self
url_for()
一般我们通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?
url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。
get_flashed_messages()
返回之前在Flask中通过 flash() 传入的闪现信息列表。
把字符串对象表示的消息加入到一个消息队列中,然后通过调用get_flashed_messages() 方法取出(闪现信息只能取出一次,取出后闪现信息会被清空)。
解题过程:参考python_template_injection这篇。
1.测试路径发现是模板注入点
2.查询当前类
3.查询当前类所继承的基类
4.查询引用这些基类的列表发现报错,之前方法行不通,换给方法。
payload换成{{url_for.__globals__}}查找当前当前的app
查看当前配置,找到flag.
或用get_flashed_messages()
总结:
flask 在 /shrine/ 下的 SSTI模板注入方法payload如下:
{{url_for.__globals__['current_app'].config}}
{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}
posted on 2022-02-25 00:01 shacker_shen 阅读(106) 评论(0) 编辑 收藏 举报