[BJDCTF2020]Cookie is so stable

打开题目是三个页面

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")}}