Laravel-RCE: CVE-2017-9841
CVE-2017-9841 是一个严重的远程代码执行(RCE)漏洞,影响广泛用于 PHP 自动化测试的 PHPUnit 库。该缺陷允许攻击者在能够访问某个暴露在外的 PHPUnit 特定文件时,在服务器上执行任意命令。
📌 主要细节 标识符:CVE-2017-9841 GOOGLE DORK "inurl:"/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php" 受影响产品:PHPUnit(组件 phpunit/phpunit)
受影响版本:5.6.3 之前的版本以及 4.8.28 之前的版本
漏洞类型:远程代码执行(RCE)
影响:严重——允许攻击者在服务器上执行任意 PHP 代码。
🔍 漏洞工作原理 问题出在 eval-stdin.php 文件中,该文件位于:
text /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php (或根据项目结构类似的路径)。
这个文件原本是为 PHPUnit 内部使用而设计的,但在很多安装中,它仍然对外公开可访问。该文件的代码只是从标准输入(php://input)读取数据,并使用 eval() 函数直接执行。也就是说,任何发送到此端点的 POST 请求都会被当作 PHP 代码执行。
利用示例 攻击者可以向存在漏洞的文件发送一个 HTTP POST 请求,例如:
http POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: alvo.com
Content-Type: application/x-www-form-urlencoded
Payload 🛡️ " "
服务器将执行该代码并返回输出,从而确认执行成功。
借此,攻击者可以升级攻击以获取反向 shell、读取敏感文件、修改数据等。
🛡️ 缓解措施
📚 附加背景 该漏洞广为人知,因为许多项目无意中使 vendor 目录对外可访问。由于 PHPUnit 是 PHP 项目(包括 Laravel、Symfony 等框架)的常见依赖,意外暴露的情况十分频繁。因此,在自动化安全扫描中,它是最常被测试的向量之一。
如果你是开发者或系统管理员,请检查你的生产环境中是否存在可从外部访问的 eval-stdin.php 文件。