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

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

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

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

工具目录

分类

查看所有分类
Loading categories
PIL-CVE-2017-8291 — CVE-2017-8291 CTF,附带 Docker 和示例 | Kitploit
工具/GitHubGitHub/hkcfs/pil-cve-2017-8291
漏洞分析漏洞利用Web应用程序漏洞利用CTF学习与教育实验室与实践
GitHubhkcfs/pil-cve-2017-8291

PIL-CVE-2017-8291

CVE-2017-8291 CTF,附带 Docker 和示例

查看仓库
11年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Python PIL 远程命令执行漏洞(GhostButt)

用于处理 Python 图像处理的 PIL(Pillow)模块,由于内部调用 GhostScript,受到 GhostButt 漏洞(CVE-2017-8291)的影响,导致远程命令执行漏洞。

漏洞简介

PIL 内部根据图片头部(Magic Bytes)判断图片类型,如果发现是 EPS 文件(文件头为 %!PS),则分发到 PIL/EpsImagePlugin.py 进行处理。

在该模块中,PIL 调用系统的 gs 命令,也就是 GhostScript,来处理图片文件:

root@kitploit:~
command = ["gs",
            "-q", # quiet mode
            "-g%dx%d" % size, # set output geometry (pixels)
            "-r%fx%f" % res, # set input DPI (dots per inch)
            "-dBATCH", # exit after processing
            "-dNOPAUSE", # don't pause between pages,
            "-dSAFER", # safe mode
            "-sDEVICE=ppmraw", # ppm driver
            "-sOutputFile=%s" % outfile, # output file
            "-c", "%d %d translate" % (-bbox[0], -bbox[1]),
                                            # adjust for image origin
            "-f", infile, # input file
            ]

# 省略判断 GhostScript 是否安装的代码
try:
    with open(os.devnull, 'w+b') as devnull:
        subprocess.check_call(command, stdin=devnull, stdout=devnull)
    im = Image.open(outfile)

虽然设置了 -dSAFER,也就是安全模式,但由于 GhostScript 中的沙箱绕过漏洞(GhostButt CVE-2017-8291),该安全模式被绕过,可以执行任意命令。

此外,截至目前,GhostScript 最新的官方版本 9.21 仍然受到此漏洞的影响,因此可以说,只要操作系统上安装了 GhostScript,我们的 PIL 就存在命令执行漏洞。

漏洞测试

运行环境:

root@kitploit:~
docker-compose up -d

运行后,访问 http://your-ip:8000/ 即可看到一个上传页面。正常功能是上传一个 PNG 文件,后端调用 PIL 加载图片,并输出长和宽。但我们可以将可执行命令的 EPS 文件后缀改为 PNG 后进行上传,因为后端是根据文件头部来判断图片类型的,所以后缀检查被忽略。

例如,上传 poc.png,即可执行 touch /tmp/youhavebeenpwned。将 POC 中的命令改为反弹命令即可获得 shell:

下载工具