【CTF】Python Jail沙箱逃逸手法总结 PyJail All in One
💡
原文中文,约33900字,阅读约需81分钟。
📝
内容提要
本文总结了Python沙箱逃逸的多种方法,包括利用os模块、subprocess、threading等执行命令的技巧,以及通过内置函数和模块进行攻击的手段。还介绍了获取函数信息、修改函数字节码和利用异常处理等技术。
🎯
关键要点
- Python沙箱逃逸是CTF比赛中的常见场景。
- 利用os模块执行命令的技巧包括os.system和os.popen。
- 通过subprocess模块可以执行shell命令。
- 使用threading模块可以在新线程中执行命令。
- 利用multiprocessing模块可以创建新进程执行命令。
- 使用ctypes模块可以调用系统命令。
- 通过内置函数和模块进行攻击的手段包括exec、eval等。
- 获取函数信息可以通过__code__属性。
- 修改函数字节码可以使用types.CodeType。
- 通过异常处理可以实现沙箱逃逸。
- 获取环境信息可以使用sys和platform模块。
- 通过删除模块和重新导入可以实现沙箱逃逸。
- 利用Python的继承链和__globals__可以访问内置函数。
- 使用AST模块可以解析和生成Python代码。
- 通过装饰器和元类可以实现函数覆盖和代码执行。
- 利用异常处理机制可以触发特定的代码执行。
- 通过构造特定的字典和列表可以实现代码注入。
- 使用海象表达式和字符串拼接可以绕过限制。
- Python的垃圾回收机制可以被利用进行沙箱逃逸。
- 通过修改内置函数和模块可以实现代码执行。
- 利用Python的审计事件可以触发特定操作。
❓
延伸问答
Python沙箱逃逸的常见方法有哪些?
常见的方法包括利用os模块、subprocess、threading、multiprocessing等执行命令的技巧,以及通过内置函数和模块进行攻击。
如何通过os模块执行命令?
可以使用os.system和os.popen等方法来执行命令,os.system不会返回输出,而os.popen可以通过read()读取输出。
如何利用subprocess模块进行沙箱逃逸?
可以使用subprocess.call和subprocess.Popen来执行shell命令,这些方法允许在新的进程中执行命令。
如何获取函数的信息和修改字节码?
可以通过函数的__code__属性获取信息,使用types.CodeType可以修改函数字节码。
Python的异常处理如何实现沙箱逃逸?
通过异常处理机制,可以触发特定的代码执行,从而实现沙箱逃逸。
如何使用AST模块进行代码解析和生成?
AST模块可以解析Python代码并生成抽象语法树,允许对代码进行分析和修改。
➡️