目录
[CISCN 2019华东南]Web11(smarty模板)
模板判断
以下是一张广为流传的图
这幅图的含义是通过这些指令去判断对方用的是什么模板,下面解释一下这幅图的意思:
我们可以看到有红色剪头和绿色箭头,绿色是执行成功,红色是执行失败。
首先是注入${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模板。
[CISCN 2019华东南]Web11(smarty模板)
点开题目
翻到底下还能看见Build With Smarty !,说明这是smarty模板,而get XFF也明显提示了要抓包在X-Forwarded-For注入,把a{*comment*}b丢进去判断发现current ip确实是返回ab,确定是smarty模板
smarty简介
smarty是一个php模板引擎,其项目地址:https://github.com/smarty-php/smarty。是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。
{if}
标签是Smarty模板中的一个合法标签,它不会触发相同的安全检查
在确认是smarty模板的情况下可以这样注入
{if system('ls')}{/if}
继续cat /flag