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

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

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

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

工具目录

分类

查看所有分类
Loading categories
PIL-CVE-2017-8291-study — 一个教育实验环境,演示通过上传带有PNG扩展名的精心构造的EPS文件实现CVE-2017-8291(PIL/GhostScript远程代码执行),包括Docker设置和PoC执行。 | Kitploit
工具/GitHubGitHub/shun1403/pil-cve-2017-8291-study
漏洞分析代码分析漏洞利用Web应用程序漏洞利用学习与教育实验室与实践
GitHubshun1403/pil-cve-2017-8291-study

PIL-CVE-2017-8291-study

一个教育实验环境,演示通过上传带有PNG扩展名的精心构造的EPS文件实现CVE-2017-8291(PIL/GhostScript远程代码执行),包括Docker设置和PoC执行。

查看仓库
51年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

PIL-CVE-2017-8291

  • 白帽学校第3期13班白承勋(@shun1403) https://github.com/shun1403/PIL-CVE-2017-8291.git
  • 环境:Ubuntu Linux

环境配置

  • 通过 sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 升级到V2
  • 如果运行出现错误,使用以下命令重新配置docker
  • sudo apt remove docker docker-engine docker.io containerd runc -y
  • sudo apt update
  • sudo apt install -y ca-certificates curl gnupg lsb-release
  • sudo mkdir -p /etc/apt/keyrings
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • sudo apt update
  • sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • docker compose version
  • 检查版本时,如果正常显示即可

git clone

git clone https://github.com/vulhub/vulhub.git

  • clone后进入要利用的漏洞路径

  • 此处为 /vulhub/python/PIL-CVE-2017-8291

  • 参考以下yml文件进行实践

  • docker compose up -d:创建容器并在后台运行的命令

  • 然后访问 localhost:8000/ 查看可上传文件的网页 image

  • 上传同一路径下的恶意 poc.png 文件

  • 上传后可以看到如下结果 image

  • 正常功能会上传PNG文件后输出图像的宽高,但后端通过文件头识别图像类型,因此可忽略扩展名,将包含可执行命令的EPS文件改为PNG扩展名上传

  • 利用这一点,在上传poc.png时可执行 'tocuh /tmp/aaaaa' 命令,将POC文件中的命令改为反弹shell命令即可获取shell

  • 上传该文件后,进入docker查看/tmp,可以确认命令执行后生成了aaaaa文件

root@kitploit:~
command = ["gs",
            "-q",                         # 静默模式(最小化输出)
            "-g%dx%d" % size,             # 设置输出图像尺寸(像素单位)
            "-r%fx%f" % res,              # 设置输入图像分辨率(DPI)
            "-dBATCH",                    # 完成后自动退出
            "-dNOPAUSE",                  # 页面之间无暂停连续执行
            "-dSAFER",                    # 启用安全模式
            "-sDEVICE=ppmraw",             # 设置输出设备为ppmraw
            "-sOutputFile=%s" % outfile,   # 指定输出文件路径
            "-c", "%d %d translate" % (-bbox[0], -bbox[1]), 
                                            # 校正图像原点(平移)
            "-f", infile,                  # 指定输入文件
          ]

判断GhostScript是否安装的代码省略

root@kitploit:~
try:
    with open(os.devnull, 'w+b') as devnull:
        subprocess.check_call(command, stdin=devnull, stdout=devnull)
    im = Image.open(outfile)

结果

image

结论

该漏洞是Python Imaging Library (PIL)中出现的漏洞,针对CVE-2017-8291进行。 漏洞产生的原因是PIL基于文件头而非文件扩展名识别图像类型,因此即使实际上是EPS格式文件,只需将扩展名改为PNG上传,服务器端调用GhostScript时就会执行文件中插入的任意命令。 在项目过程中,通过上传恶意poc.png文件确认服务器内部生成了/tmp/aaaaa文件,重现了漏洞实际可导致命令执行(RCE,远程代码执行)。此外,该漏洞利用了原本的图像处理功能,存在扩展为反弹shell等高级攻击的可能性。

下载工具