CVE-2019-11043复现-PHP 远程代码执行漏洞

CVE-2019-11043复现-PHP 远程代码执行漏洞

漏洞简介

前置条件: Nginx + fastcgi + php-fpm

当Nginx + php-fpm 的服务器有如下配置的时候,都会出现RCE漏洞

当启用了上述 Nginx 配置后,以下 PHP 版本受本次漏洞影响,另外,PHP 5.6版本也受此漏洞影响,但目前只能Crash,不可以远程代码执行:

PHP 7.0 版本

PHP 7.1 版本

PHP 7.2 版本

PHP 7.3 版本

起因(菜鸡表示看不懂…)

因为“fpm_main.c”文件的第1150行代码中由于\n(%0a)的传入导致nginx传递给php-fpm的PATH_INFO为空。
https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150
进而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置。在特殊构造的配置生效的情况下可以触发任意代码执行。

大佬可参考原文https://bugs.php.net/bug.php?id=78599

环境搭建

php环境

可以使用vulhub的环境, 先在在vulhub目录下新建一个CVE-2019-11043目录, 再在里面创建一个www目录

CVE-2019-11043文件夹下执行如下命令

CVE-2019-11043/www文件夹下执行如下命令

下载完成三个文件以后,在CVE-2019-11043文件夹下执行如下命令启动环境,

成功创建后, 访问会显示hello world

1571972729937

go语言环境

go安装包下载地址为:https://golang.org/dl/。

如果打不开可以使用这个地址:https://golang.google.cn/dl/。

安装很简单, 可参考https://www.runoob.com/go/go-environment.html

克隆exp的仓库到本地

即可生成phuip-fpizdam工具

1571970796775

执行效果图

1571970612159

1571970588699

注意,因为php-fpm会启动多个子进程,在访问/index.php?a=id时需要多访问几次,以访问到被污染的进程。

exp分析

二次开发

phuip-fpizdam/attack.go中更改需要植入的参数即可, 如图

1571973184479

原本的exp是用的反引号(`)来执行命令, 估计是将which写入了环境变量/usr/bin/which目录, 再用which which 指令来查看是否成功1571973713616

我将其改为一句话


连接一句话的截图就不上了, windows下运行exp有点慢

reference

https://bugs.php.net/bug.php?id=78599

https://github.com/vulhub/vulhub/blob/master/php/CVE-2019-11043/README.zh-cn.md

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

CVE-2019-11043-PHP远程代码执行漏 – Mrxn’s Blog-关注web安全、热爱黑客技术的伪黑客博客

作者: Henry

Learn to share and enjoy life, that's why I am here

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据