题目
点进题目后显示如下
查看源代码,查看可知为ssti注入。还设置了过滤的名单。
先可以测试一下是否存在ssti模板注入
payload
\shrine\{{2-2}}
回显成功,存在ssti模板注入
绕过思路,代码里有过滤,会把()替换,这里可以双写绕过,用命令执行读取文件
另一个思路,这里可以参考一篇文章Python Flask,Jinja2模板,模板中使用特殊变量及函数,闪现信息,get_flashed_messages()_jinja2 get_flashed-CSDN博客
根据文章,payload如下
/shrine/{{url_for.__globals__['current_app'].config}}
由代码可知,config['FLAG'],所以可以得到flag
理清思路,由于代码可以知道flag存储在config中,可以直接构造payload查询
如果是不清楚flag存在哪里,就需要先获取全局变量
根据上述文章,也可以使用另一个payload
/shrine/{{get_flashed_messages.__globals__['current_app'].config}}
都是不需要括号函数执行命令