nginx+php-fpm远程代码执行漏洞

0x00 前言

2019年9月26日,PHP官方发布了Ngnix+php-fpm在错误配置下造成的远程代码执行漏洞(CVE-2019-11043),2019年10月22日,漏洞poc被公开: https://github.com/neex/phuip-fpizdam

0x01 漏洞复现

漏洞原因

在Ngnix+php-fpm环境下,如果Ngnix有如下配置,将会产生漏洞

1
2
3
4
5
6
7
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
}

环境搭建

使用docker搭建漏洞,vubhub已有漏洞环境https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '2'
services:
nginx:
image: nginx:1
volumes:
- ./www:/usr/share/nginx/html
- ./default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
ports:
- "8080:80"
php:
image: php:7.2.10-fpm
volumes:
- ./www:/var/www/html

ngnix配置文件 default.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 80 default_server;
listen [::]:80 default_server;

root /usr/share/nginx/html;

index index.html index.php;

server_name _;

location / {
try_files $uri $uri/ =404;
}

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;

fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_pass php:9000;
}

}

然后docker-compose up -d启动漏洞环境

安装 phuip-fpizdam

1
2
3
go get github.com/neex/phuip-fpizdam

go install github.com/neex/phuip-fpizdam

然后使用phuip-fpizdam进行利用./phuip-fpizdam url,成功如下。

然后加参数?a=cmd即可执行任意命令。

0x02 修复建议

  • 在业务不需要的情况下删除配置fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info;

  • ngnix配置文件存在检查 try_files $uri =404 或者 if (-f $uri)

本文标题:nginx+php-fpm远程代码执行漏洞

文章作者:boogle

发布时间:2019年10月24日 - 09:11

最后更新:2019年10月24日 - 09:12

原始链接:http://zhengbao.wang/nginx-php-fpm远程代码执行漏洞/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗