前言
之前做ssti题目的时候不认真,总是跟着wp做完就完事了,可能纯粹为了好玩做ctf题目,开个眼界,没有放在心上。现在想认真入门了,做个笔记。
以BUUCTF上的题目为例。本来想用sstilabs的,但是做题的时候,试了各种payload,flag就是出不来,不明白什么问题,如果有大佬知道咋解决的,告诉我一下,感谢。
一、判断模板类型
绿线表示payload成功解析,红线表示没有解析,原样返回了。一步一步向后判断,就能得出具体类型。
二、上例题
1.[BJDCTF2020]Cookie is so stable
一步一步判断:
失败了
尝试{{7*7}}
成功解析
继续{{7*'7'}}
依旧成功
可得出模板可能是Jinja2或者是Twig
继续尝试{{''.__class__}}
发现没有任何回显,感觉无了
再尝试{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
应该是被检测到了
根据题目猜测注入点在cookie中的user
再次尝试
有回显了
在尝试一下{{''.__class__}}
依旧没有任何显示
可能这里使用的模板就是Twig
查看了许多文章,用的都是一个针对Twig的payload
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
cat /flag
可以换成其他系统命令
得到flag
2.[BJDCTF2020]The mystery of ip
既然题目叫the_mistery_of_ip
,那肯定是在IP上下功夫
hint页面中也有提示,猜测xff伪造
进行尝试
发现根据xff内容,页面进行了更改
当然第一次看到这个题目我是懵的,所以去看wp了,按照正常顺序应该是猜测sql注入无果后再试ssti
所以这里就开个上帝视角,直接尝试ssti注入
和上面一道题目一样的步骤,进行判断模板类型
是Smarty模板,然后去查常用的payload
发现在{}
里可以直接执行php命令
于是{system('ls')}
有flag.php
,去看一下
emmmmm,我又懵了。。。。。。。百度了一下,这是源码,flag不在这
再看一下根目录
又看到了flag,再看一下
是在这了。。。。。
Twig模板其他payload参考:PHP Smarty模版注入
后面貌似还有相关题目。但是还没有去做,所以就不放了,下次合着别的题目一起写了
总结
这次只是简单的把以前写的题目进行了总结,大致明白了解题步骤,但还是得多积累一些payload,以及绕waf的方法。这个可以去找sstilab通关相关内容进行学习,感觉那上面挺全的。