安全研究

安全漏洞
PHP FILTER_UNSAFE_RAW过滤器失效漏洞

发布日期:2008-12-08
更新日期:2009-01-06

受影响系统:
PHP PHP 5.2.7
描述:
CVE(CAN) ID: CVE-2008-5844

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

PHP 5.2.7错误地更改了FILTER_UNSAFE_RAW功能,无论实际的magic_quotes_gpc设置如何都可能无意中禁用magic_quotes_gpc。根据设计unsafe_raw过滤器应可选的剥离或转义特殊字符,该过滤器失效可能允许攻击者相对容易的执行SQL注入等攻击。

<*来源:arnaud.lb (arnaud.lb@gmail.com
  
  链接:http://bugs.php.net/bug.php?id=42718
*>

测试方法:

警 告

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

- 显示filter.default和filter.default_flags值
- 检查$_GET['a']是否包含有空字节(FILTER_UNSAFE_RAW应通过FILTER_FLAG_STRIP_LOW标记过滤掉空字节)
- 通过带有相同过滤器/标记的filter_input()检查$_GET['a']是否包含有空字节

<?php
echo "filter.default = " . ini_get('filter.default') . " <br />\n";
echo "filter.default_flags = " . ini_get('filter.default_flags') . " <br
/>\n";
echo "<br />";
echo "\$_GET['a'] contains \\0: " . (strpos($_GET['a'], "\0") !== false
? 'Yes' : 'No') . " <br />\n";
echo "<br />";
echo "\$_GET['a'] throught filter_var() contains \\0: " .
(strpos(filter_var($_GET['a'], FILTER_UNSAFE_RAW,
FILTER_FLAG_STRIP_LOW), "\0") !== false ? 'Yes' : 'No') . "<br />";
echo "<br />";
?>

预期结果
----------------
filter.default: unsafe_raw
filter.default_flags: 4

$_GET['a'] contains \0: No

$_GET['a'] through filter_var() contains \0: No

实际结果
--------------
filter.default: unsafe_raw
filter.default_flags: 4

$_GET['a'] contains \0: Yes

$_GET['a'] through filter_var() contains \0: No

建议:
厂商补丁:

PHP
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://ookoo.org/svn/snip/php_5_2-broken_filter_and_magic_quotes.patch

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