知识点:smart ssti
思路
根据下面的三张图提示,可以看出是smart ssti
,在XFF
处构造payload,在做题前先了解一下啥是smart。
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
smart ssti:
smart是php的模板引擎,模板引擎的作用就是分离前端页面和数据的,题目中显示API的URL由于环境的原因无法使用,但我们的IP依旧显示在了页面的右上角,且根据它的提示XFF我们很容易想到,在X-Forwarded-For里构造ssti:payload。
在构造payload前先看张图。
下图是用来测是什么模板的
例如:
Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令,那么我们可以使用{php}{/php}标签来构造payload,但是本题会报错
因为现在的smart已经不用此标签了。
可以用{$smarty.version}
来看一下版本。
虽然php标签不能用,但是还有个{if}标签。
Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {elseif}. 全部的PHP条件表达式和函数都可以在if内使用,如*||*,or,&&,and,is_array(), 等等
既然全部的PHP条件表达式和函数都可以在if内使用,那我们在里面写php代码也行。
{if phpinfo()}{/if}
我们通过一串代码来了解一下,它的漏洞为什么会产生。
<?php
require_once('./smarty/libs/' . 'Smarty.class.php');
$smarty = new Smarty();
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
//获取XFF
$smarty->display("string:".$ip);
//此处并不是以smart模板格式,而是以字符串形式,所以会解析我们的标签,也就是if,解析后把内容回显到页面上的相应位置
}
代码链接:https://www.jianshu.com/p/eb8d0137a7d3
payload:X-Forwarded-For:{if system('cat /flag')}{/if}
参考:
https://www.jianshu.com/p/eb8d0137a7d3