[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}