文章目錄
一、適用場景
- 拿到的Web服務器權限較低;
- 目標服務器有mysqld服務,且擁有Mysql的system權限
二、UDF提權
2.1 UDF介紹
2.1.1 含義
UDF(User Defined Functions,用戶自定義函數)Mysql的一個擴展接口,用戶可以添加新函數對MYSQL的功能進行補充。C++函數編寫,文件後綴爲 .dll。
2.1.2 UDF使用
這裏我們使用下面提權過程中使用的lib_mysqludf.dll文件來闡述UDF能幹啥?
lib_mysqludf.dll(sqlmap工具自帶)文件中提供瞭如下函數,可動態加載執行任意系統命令:
函數 | 作用 |
---|---|
sys_eval () | 執行任意系統命令,並將輸出返回 |
sys_exec () | 執行任意系統命令,並將退出碼返回 |
sys_get () | 獲取一個環境變量 |
sys_get () | 創建或修改一個環境變量 |
如果沒有UDF庫文件(.dll)沒有在\plugin目錄下的話,執行會報錯:(不能打開共享庫)
因此,如果想使用自定義函數功能,必須將UDF庫文件放入到指定的位置下纔可以,這個也是UDF提權的核心所在!
2.1.3 注意點
官網對UDF安全項說明:爲了防止濫用用戶定義的函數:
- 要創建 / 刪除自定義函數必須擁有數據庫的insert或delete權限(添加和刪除行)
- Mysql版本<5.1之前,UDF庫文件需導入到系統目錄:C:\Windows / C:\Windows\system32下;
- Mysql版本>=5.1之後,UDF庫文件必須放入服務器的插件目錄中(~/lib/plugin目錄下,該目錄由plugin系統變量的值給出,默認不存在,如提權需設法創建)。
Tips 1:Mysql5.1版本前和版本後的plugin_dir目錄?
- Mysql<5.1版本,查看plugin_dir目錄:
- Mysql>=5.1版本,查看plugin_dir目錄:
Tips2. 關於udf官方解釋,官網傳送門
2.2 UDF提權操作
2.2.1 核心操作
mysql<5.0,將udf庫文件導出的路徑隨意;
5.0 <= mysql <+ 5.1 ,將udf庫文件傳入到系統目錄下;
mysql>5.1,將udf庫文件傳入到/lib/plugin目錄下(默認不存在,因此需要建立plugin也是提權要點限制條件之一)
2.2.2 提權限制
限制1
- mysql開啓了遠程連接(可以遠程連接執行mysql命令)
限制2
- secure_file_priv值爲空(mysql允許將數據導出到本地,遠程傳入UDF庫文件到目標服務器本地指定目錄)
限制3
- 創建/plugin目錄(高版本的mysql數據庫默認沒有此目錄需要遠程創建)
限制4
- 免殺(傳入的UDF庫文件未被殺軟殺掉)
2.2.3 操作過程
A. 環境展示
Windows10(攻擊機,ip:192.168.3.4)
Windows 2008 R2(虛擬機,ip:192.168.7.131)
Mysql 5.5.3(PHPStudy 2018)
B. 準備DLL文件
自動化注入工具sqlmap已集成lib_mysqludf_sys庫文件:(具有和操作系統進行交互功能的UDF庫,官網說明傳送門)
其位置:
需要針對對方Mysql版本使用對應的dll文件才能生效
這裏的dll文件需要經過解碼才能使用,接下來對dll文件進行解碼:
Tips:sqlmap自帶的shell或一些二進制文件,爲了防止被誤殺都經過異或方式編碼,不能直接使用,可以利用自帶的解碼工具cloak.py進行解碼(目錄:\sqlmap\extra\cloak\cloak.py)
》》進入到cloak目錄下執行如下命令即可解碼,生成UDF庫文件
cloak.py -d -i <要解碼文件>
C. 判別能否外聯
目的:首先查看mysql是否允許遠程連接:
》》Nmap探測目的端口是否開放了mysql服務(已開放)
》》測試是否開啓遠程連接,這裏提供三種方法
方法一: 啓動mysql服務本地嘗試(返回如下不允許連接):
方法二: 使用客戶端管理軟件連接試探(返回如下則不允許遠程連接,推薦):
方法三: Hydra 遠程爆破,顯示如下則不允許遠程連接
Tips:這裏爲了演示提權方法,先允許數據庫遠程連接,操作請參考:Mysql開啓遠程連接
D. 遠程傳入文件
目的:將sqlmap已解碼後的dll文件傳入到指定目錄下!
Tips:這裏爲了演示已滿足提權限制2(secure_file_priv值爲空,這樣才能導入到文件到本地!),查看修改變量值secure_file_priv值方法可參考:Mysql導出數據之全局變量secure_file_priv