0%

[CISCN2019 华东南赛区]Web11 -- Smarty SSTI

前言

 这题主要考的是ssti注入,与以前不同的是这是我第一次遇到Smarty的ssti注入题。

确定漏洞

  1. 打开题目后发现右上方有个Current IP:127.0.0.1很明显这是我用xxf伪造的ip。猜测ssti。
  2. 抓包,按照下图的判断可以知道是 Smarty 框架。
  3. 然后一般情况下输入{$smarty.version}就可以看到返回的smarty的版本号。该题目的Smarty版本是3.1.30

常用利用方式

{php} 标签

Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令,最常规的思路自然是先测试该标签。但就该题目而言无效,因为3.1.30已废除这个{php}标签。

{literal} 标签

 {literal}可以让块中间的内容忽略Smarty的解析。我们可以使用

1
{literal}<script language="php">phpinfo();</script>{/literal}

但是php7已经不支持<script language="php">这种写法了。

{if} 标签 (牛掰)

 每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {elseif}. 全部的PHP条件表达式和函数都可以在if内使用。
 也就是说我们把php代码写在{if PHP代码}{/if} 就可以了,PHP代码可以被执行。

题解 payload

我们使用如下payload 放再 xxf位置:

1
2
{if system('cat /flag')}{/if}
##注意语句后面不需要分号。

可以得到flag:


-------------本文结束感谢您的阅读-------------