php-fpm漏洞复现

1.php-fpm漏洞详情

  • 当nginx使用特定的fastcgi配置的时候,就会存在远程代码执行漏洞,但是这个配置并不是默认配置
  • fastcgi_split_path_info字段配置为^(.+?\.php)(/.*)$;时,攻击者可以通过精心构造playload造成远程代码执行,改配置已经被广泛使用,危害较大。

2.复现

  1. 安装docker环境
git clone https://github.com/vulhub/vulhub.git
  1. 进入目录 /vulhub/vulhub/tree/master/php/CVE-2019-11043并运行安装环境
docker-compose up -d

在这里插入图片描述

  • 查看镜像docker images
    在这里插入图片描述
  • 查看环境:http:ip:8080
    在这里插入图片描述
  1. 下载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
  1. 编辑/etc/profile,在文件最后添加export PATH=$PATH:/usr/local/go/bin,执行source /etc/profile
  2. 获取工具:go get github.com/neex/phuip-fpizdam
  3. 执行exp:./phuip-fpizdam http://ip/index.php 在/tmp/写入文件a
    在这里插入图片描述
  4. 在docker中进入镜像环境,查看tmp的目录
    在这里插入图片描述
  5. 查看效果:
    在这里插入图片描述

3.修复

  1. 修改nginx配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符

  2. 暂停使用 nginx+php-fpm 服务

  3. 根据实际生产环境的业务需求,将以下配置删除
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;

发表评论

电子邮件地址不会被公开。