PHP-FPM RCE(CVE-2019-11043)

  1. 漏洞简介
    1. 漏洞描述

Nginx + php-fpm部分配置下存在的远程代码执行高危漏洞,攻击者可利用该漏洞对目标网站进行远程代码执行攻击

    1. 影响范围

漏洞影响的版本:

PHP 5.6-7.x,Nginx>=0.7.31

    1. 漏洞原理

Nginx与 php-fpm 服务器上存在远程代码执行漏洞,由于Nginx的fastcgi_split_path_info模块在处理带%0a的请求时,对换行符 \n 处置不当使得将 PATH_INFO 值置为空,从而导致 php-fpm 在处理 PATH_INFO 时存在漏洞,攻击者通过精心的构造和利用,可以导致远程代码执行

    1. 环境搭建

利用docker生成漏洞环境

在vulub/php/CVE-2019-11043的路径下执行docker-compose up -d生成漏洞环境

 

然后,在浏览器中打开http://ip:8080/index.php,就可以看到如下图所示,环境搭建成功。

 

  1. 漏洞分析

当url路径中存在%0a时会将URL截断:http://ip/index.php/123%0atest.php,并且Nginx处理url的正则有个bug,在解析的时候会把path_info置空;

这种结果会导致PATH_INFO为空——>env_path_info为空——>pilen为0且slen可控——>path_info下溢漏洞验证;

在path_info下溢之后,执行了path_info[0] = 0;,向下溢的地址写了一字节的0,这就造成了可控地址写0的能力;

接下来,通过这一字节写0能够达到写环境变量的目的,需要将一字节写0的应用到能够修改fcgi_data_seg的低位,达到向fcgi_hash_buckets写环境变量的进一步操作,可以通过覆盖写入与PHP_VALUE相同HASH的另一个键:HTTP_EBUT;

然后使用环境变量写入链输出内容到日志文件,然后包含日志文件进行代码执行,最终个RCE。

    1. 基础知识

PHP-FPM(FastCGI Process ManagerFastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP 5.3.3之前的php来说,是一个补丁包 [1]  ,旨在将FastCGI进程管理整合进PHP包中。

    1. 开始验证

执行php-frm的exp脚本,输入URL,然后浏览器中输入构造的URL地址,就会执行相对应的命令:

 

 

 

复现成功

  1. 漏洞总结及防御方案

结:

利用该漏洞,恶意攻击者可以构造攻击请求进行远程代码执行

防御方案:

如果配置文件有fastcgi_split_path_info,就加上if(!-f $document_root$fastcgi_script_name){return 404;},

如果没有,则无需修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值