【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代码并生成抽象语法树,允许对代码进行分析和修改。

➡️

继续阅读