PHP-FPM Remote Command Execution (CVE-2019-11043)
before hack
知识
在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。
在使用一些有错误的Nginx配置的情况下,通过恶意构造的数据包,即可让PHP-FPM执行任意代码。
漏洞介绍
nginx + php-fpm 配置不当,当nginx配置文件中有fastcgi_split_path_info模块,在处理带%0a的请求时,对换行符\n 处置不当使得将PATH_INFO值置为空,从而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置,在特殊构造的配置生效的情况下可以触发任意代码执行。
影响范围
在 Nginx + PHP-FPM 环境下,当启用了上述 Nginx 配置后,以下 PHP 版本受本次漏洞影响,另外,PHP 5.6版本也受此漏洞影响,但目前只能 Crash,不可以远程代码执行:
● PHP 7.0 版本
● PHP 7.1 版本
● PHP 7.2 版本
● PHP 7.3 版本
Nginx使用如下特定配置:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
}
hack it
下载攻击工具,https://github.com/neex/phuip-fpizdam
进行攻击.
访问?a=id,会看到以下结果。注意,因为php-fpm会启动多个子进程,在访问/index.php?a=id
时需要多访问几次,以访问到被污染的进程