[CISCN2019 华东南赛区]Web11

[CISCN2019 华东南赛区]Web11

写在前面

参考文章:Smarty SSTI

1.{php}

Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1,{php}仅在SmartyBC中可用。

2.{literal}标签

{literal}可以让一个模板区域的字符原样输出。这经常用于保护页面上的Javascript或css样式表,避免因为Smarty的定界符而错被解析。

PHP5中可用

<script language="php">phpinfo();</script>

3.getStreamVariable

这个方法可以读取一个文件并返回其内容,可以用self来获取Smarty对象并调用这个方法

新版本smarty已将该静态方法删除

payload:{self::getStreamVariable("file:///etc/passwd")}

4.{if}标签

Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {elseif}. 全部的PHP条件表达式和函数都可以在if内使用,如||,or,&&,and,is_array(), 等等

{if phpinfo()}{/if}

题解

打开题目观察网页发现是用的smarty模板,同时我们的IP显示在了右上角

API Usage处直接在url处修改 发现回显在API URI中但是通过尝试发现没啥用

图一

利用bp抓包在headers添加

x-forwarded-for:{2-1}

右上角IP回显为1,找到注入点

图二

根据文章中的{if}标签可以读出flag

{if readfile('/flag')}{/if}

图三

posted @ 2020-07-13 11:17  Rabbittt  阅读(1223)  评论(0编辑  收藏  举报