社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

CVE-2019-11043PHP-FPM在Nginx特定配置下远程代码执行漏洞复现

安全漏洞环境学习 • 5 年前 • 365 次点击  

0x01:漏洞概述

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

漏洞信息

漏洞名称         PHP-FPMNginx特定配置下远程代码执行

CVE编号CVE-2019-11043

CNVD编号      -

影响版本         参考影响范围

威胁等级         高危

公开时间         2019926

影响范围

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

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

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

   fastcgi_param PATH_INFO      $fastcgi_path_info;

   fastcgi_pass   php:9000;

  }

}

0x02,环境准备

环境下载:

https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

启动环境

mkdir Andrew

cd Andrew

docker-compose up –d

docker ps


进入nginx中,创建文件

Docker exec –it f2e659d78e37 /bin/bash

访问地址http://192.168.157.128:8080/index.php

0x03,漏洞复现

下载 phuip-fpizdam,编译

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

kali安装go教程:https://studygolang.com/articles/11279

漏洞攻击(这里我用的编译好的)

在浏览器中访问:http://192.168.157.128:8080/index.php?a=id

也可进行无害的漏洞检测,命令如下:

phuip-fpizdam http://192.168.157.128:8080/index.php--skip-attack

0x04,漏洞分析

PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。

 

nginxphp-fpm结合的处理流程

 

打开php-fpm.conf文件,我们看到如下配置:

:php-fpm模块监听127.0.0.1:9000端口,等待请求到来去处理。

处理过程:

 


漏洞触发点

 

因为“fpm_main.c”文件的第1150行代码中由于\n(%0a)的传入导致nginx传递给php-fpmPATH_INFO为空。

https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150

进而导致可以通过FCGI_PUTENVPHP_VALUE相结合,修改当前的php-fpm进程中的php配置。在特殊构造的配置生效的情况下可以触发任意代码执行。

 

此漏洞利用的先决条件:

 

1. php需要开启FPM模块,该模块在php虽然在PHP5.3.3之后已经加入php核心代码但是的PHP的发行版默认不安装php-fpm模块,所有默认的用户不受影响;要想php支持php-fpm,只需要在编译php源码的时候带上--enable-fpm

2. 需要修改/nginx/conf/nginx.conf配置;

 

0x05,修复意见

 

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

  • 暂停使用nginx+php-fpm 服务

  • 根据自己实际生产环境的业务需求,将以下配置删除

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

fastcgi_param PATH_INFO  $fastcgi_path_info;


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48071
 
365 次点击