Python模块注入技术简析
原文中文,约4700字,阅读约需12分钟。
📝
内容提要
这段文本分享了一个神奇的Python代码,可以将自身编译成pyc文件并加载。使用zipimport模块将pyc文件中的unused值识别为zip文件,并解析其中的__main__.py字节码。通过runpy.run_code()执行字节码,输出'hacked lol'。作者提到了调用栈和zip文件格式的参考链接。可以自制类似的PoC,将代码放入zip文件中即可。
🎯
关键要点
-
分享了一段Python代码,可以将自身编译成pyc文件并加载。
-
使用zipimport模块识别pyc文件中的unused值为zip文件,并解析__main__.py字节码。
-
通过runpy.run_code()执行字节码,输出'hacked lol'。
-
PoC执行时将自身编译成pyc再加载,使用zipimport模块。
-
unused的前4字节是zip文件的magic number,作者故意不以可打印字符显示。
-
最简方案是将想执行的代码放入__main__.py,再压缩成zip文件。
-
可以自制类似的PoC,将代码放入zip文件中即可。
-
提供了zip文件格式和Python调用栈的参考链接。
-
通过gdb调试Python解释器得到的调用栈回溯,分析了zipimport的工作原理。
-
版权声明指出内容的版权归绿盟科技所有,未经授权不得使用。
🏷️