[BJDCTF2020]The mystery of ip

打开环境,有个flag和hint,点击flag,发现有我们本机IP的回显,很有可能是http请求头中有XFF信息将我们ip一起带过去了,我们先试试伪造XFF头看看情况。

发现显示会随着我们伪造而改变,Smarty是一个PHP的模板引擎,提供让程序逻辑与页面显示(HTML/CSS)代码分离的功能。Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令,最常规的思路自然是先测试该标签。Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1,{php}仅在SmartyBC中可用。而{literal}可以让一个模板区域的字符原样输出。 这经常用于保护页面上的Javascript或css样式表,避免因为Smarty的定界符而错被解析。

那么对于php5的环境我们就可以使用:

<script language="php">phpinfo();</script>

// 从PHP7开始,这种写法<script language="php"></script>,已经不支持了

来实现PHP代码的执行,但这道题的题目环境是PHP7,这种方法就失效了。

然而,Smarty的{if}条件判断和PHP的if非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if},也可以使用{else} 和 {elseif},全部的PHP条件表达式和函数都可以在if内使用

将XFF头改为{if phpinfo()}{/if},可以看到题目执行了phpinfo(),就说明存在Smarty的ssti模板注入

 

题目提示问为什么可以获取到客户端ip,考虑是XFF或Client-IP这两个header,在XFF处输入:{{system('find / -name flag')}},显示/flag,说明在根目录下,再用{{system('cat \flag')}}得到答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin_xiao~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值