WMI学习总结
WMI
WMI,是Windows 2K/XP管理系統的核心;對于其他的Win32操作系統,WMI是一個有用的插件。WMI以CIMOM為基礎,CIMOM即公共信息模型對象管理器(Common Information Model Object Manager),是一個描述操作系統構成單元的對象數據庫,為MMC和腳本程序提供了一
個訪問操作系統構成單元的公共接口。有了WMI,工具軟件和腳本程序訪問操作系統的不同部分時不需要使用不同的API;相反,操作系
統的不同部分都可以插入WMI,如圖所示,工具軟件和腳本程序可以方便地讀寫WMI。
中文名 WMI?
外文名 Windows Management Instrumentation?
適用范圍 Windows/XP系統?
使用者 計算機用戶
定義
WMI(Windows Management Instrumentation,Windows 管理規范)是一項核心的 Windows 管理技術;用戶可以使用 WMI 管理本地和遠
程計算機。
簡介
Windows 2K/XP和Windows 98 都支持WMI;如果為NT 4.0和Windows 95加上了 Service Pack 4或更高版本,N
T 4.0和Win95也支持WMI。因此,用WMI進行遠程管理時,并非一定要用Windows 2K/XP(當然,如果WMI腳本在一臺沒有性能監視器的
Win9x機器上運行,就不能在遠程Win9x系統上查詢Windows 2K/XP的性能監視器。
如前所述,WMI允許通過一個公共的接口訪問多種操作系統構成單元,因此不必分別對待各種底層接口或所謂的“提供者”。利用WMI可
以高效地管理遠程和本地的計算機;與此相對,并非所有的Windows 2K/XP命令行工具都支持遠程運行。
WMI是WBEM模型的一種實現。WBEM即Web-Based Enterprise Management,或基于Web的企業管理,WBEM由DMTF(Distributed Management?
Task Force,分布式管理任務組)在許多廠商的幫助下創立,包括Compaq、Sun、Microsoft等。WBEM的目標是,為管理企業環境開發一
個標準的接口集。WBEM模型最關鍵的部分是它的數據模型(或描述和定義對象的方式)、編碼規范(Encoding Specification),以及
在客戶端和服務器端之間傳輸數據的模式。
WBEM的數據模型是CIM(Common Information Model,公共信息模型)。CIM是一個用來命名計算機的物理和邏輯單元的標準的命名系統
(或稱為命名模式),例如硬盤的邏輯分區、正在運行的應用的一個實例,或者一條電纜。
CIM是一個面向對象的模型,使用一組面向對象的術語進行描述。CIM包含類(Class),類是被管理單元的模板。類的實例稱為對象
(Object),對象代表著底層系統的一個具體單元。名稱空間(Namespace)是一個類的集合,每個名稱空間面向一個特定的管理領域。
類包含屬性(Property)和方法(Method)。
CIM分三層。第一層是核心模型(Core Model),這一層包含的類定義對于所有管理領域來說都是共同的。第二層是公共模型(Common?
Model),這一層包含的類定義對于特定的管理領域來說是公共的,但與具體的操作系統和系統設計無關。第三層是擴展模型
(Extension model),這一層包含的類定義與特定的操作系統或技術有關。
WMI是Microsoft擴展CIM 2.0得到的面向Win32系統的擴展模型。引用WMI類和屬性的形式是“擴展前綴_類名稱.屬性名稱”,例如
Win32_ComputerSystem. Name,其中Win32是CIM模式cimv2名稱空間內WMI擴展類的前綴,ComputerSystem是類,Name是屬性。
編寫WMI腳本的很大一部分工作涉及到讀取和設置屬性值。當前,WMI提供的方法還很有限,但隨著時間的推移,相信WMI和CIM提供的方
法都會越來越豐富。
操作方法
利用WMI軟件開發包(SDK)可以方便地查看可用的CIM和Win32類。WMI SDK可以從MSDN下載。
WMI SDK要求操作系統必須是Windows 2K/XP或者NT 4.0 SP4或更高版本;盡管Win9x系統上可以安裝WMI支持軟件,但SDK不能在Win9x上
運行。另外,為支持SDK的ActiveX控件,SDK還要求有IE 5.0或更高版本。SDK對機器性能的最低要求是:Pentium處理器,32 Mb的RAM,
40 Mb的磁盤空間,以及至少要有800 x 600、256色的顯示設備。對于運行Windows 2K/XP的機器來說,這些要求應該不會成為問題。
CIMOM默認以服務的形式運行,但如果機器沒有網卡,CIMOM不能作為服務運行,不過此時可以作為一個應用運行,只需執行winmgmt.exe
即可。winmgmt.exe在\%systemroot%\system32\wbem的WMI主目錄下。
SDK必須由管理員組的成員安裝。安裝過程很簡單,執行WMISdk.exe啟動向導,指定安裝的目標目錄(默認是\program files\wmi)。選
擇要安裝的可選組件(默認安裝除了SNMP支持以外的所有組件),最后點擊Finish。安裝SDK不需要重新啟動。安裝完成后,“開始/程
序”菜單上會增加一個WMI SDK組。
點擊WMI SDK程序組的WMI CIM Studio。CIM Studio提示連接名稱空間,并顯示默認連接的名稱空間是root\cimv2,確認即可。如果你用
Administrator身份登錄Windows,再次點擊確定以當前身份登錄;如果你用其他的身份登錄Windows,請改用Administrator登錄。
假設我們要在當前的機器上查找一個對象:C:驅動器。我們不知道C:驅動器在CIM或WMI中的具體名稱,瀏覽CIM Studio列出的數百個類
又太麻煩,怎么辦呢?可以使用Find按鈕(左邊上方的望遠鏡,參見圖三)。圖二顯示了點擊Find按鈕后顯示的Search for Class對話
框,在這里輸入我們猜想C:驅動器的類名稱中應當包含的單詞,然后點擊Go!按鈕。由于我們正在尋找一個命名的磁盤分區,而且我們知
道Windows把這種分區叫做logical disk或logical drive,因此這里的搜索關鍵詞可以是logical。當然,搜索關鍵詞也可以是disk,但
這時會有大量的搜索結果出現。
圖二顯示了搜索關鍵詞logical得到的結果。選擇Win32_LogicalDisk并點擊OK,圖三的窗口出現(為什么不選擇CIM_LogicalDisk?前面
已經提到,WMI管理的所有對象都帶有Win32前綴。如果選擇CIM_LogicalDisk然后要求顯示出它的實例,不可能看到可用邏輯驅動器的任
何具體信息,只能看到對應每一個可用邏輯驅動器的Win32_LogicalDisk條目)?,F在,窗口的右邊顯示出Win32_logicalDisk類的屬性
??梢钥吹?#xff0c;屬性的值都為空,這是因為我們正在查看的是一個類,而不是類的具體實例。要顯示出Win32_LogicalDisk類的實例,點擊
右邊上面的Instances按鈕(右數第四)。
點擊Instances按鈕之后,窗口顯示出當前機器上所有邏輯驅動器的實例,包括網絡邏輯驅動器。點擊設備ID為“C:”的實例,顯示出圖
四的結果。右邊窗格包含了當前實例的屬性和方法,當前邏輯驅動器的名稱顯示在右邊窗格的上方。
利用腳本可以修改這些屬性或調用這些方法。如果對某個屬性的含義不太清楚,只需選擇Win32_LogialDisk類或
Win32_LogicalDisk.DeviceID="C:"實例,再點擊Help按鈕。大多數對象的屬性和方法都有詳細的說明。
功能
現在很多朋友仍然在使用管理員賬號密碼為空的系統,這樣就為黑客制造了可乘之機,其中系統自帶的WMI是最方便的入侵通道。WMI
(Windows管理規范)作為一項Windows管理技術,方便用戶對計算機進行遠程管理。但是它的易用性也導致了系統的安全性大幅下降。
讓用戶的電腦除了自己賬號密碼的保護外再沒有什么安全保護措施。本期我們就向大家介紹“菜鳥”級的黑客都可以輕易利用的入侵通
道——WMI(Windows管理規范)。
小知識:什么是WMI?
WMI是一項核心的Windows管理技術,WMI作為一種規范和基礎結構,通過它可以訪問、配置、管理和監視幾乎所有的Windows資源,比如
用戶可以在遠程計算機器上啟動一個進程;設定一個在特定日期和時間運行的進程;遠程啟動計算機;獲得本地或遠程計算機的已安裝
程序列表;查詢本地或遠程計算機的Windows事件日志等等。
本質善良的WMI
從WMI本來的功能看,它是為了讓計算機的管理更容易,同時方便管理員遠程操作系統而產生的,那么它又怎么會為“菜鳥”級的入侵者
提供方便呢?
一般情況下,在本地計算機上執行的WMI操作也可以在遠程計算機上執行,只要用戶擁有該計算機的管理員權限。如果用戶對遠程計算機
擁有權限并且遠程計算機支持遠程訪問,那么用戶就可以連接到該遠程計算機并執行擁有相應權限的操作。
WMI能夠成為遠程控制下的一個合法通道,有了這個通道,入侵者不需要對自己進行偽裝,不必再為探測出對方賬號的密碼為空后,找不
到連接對方系統的通道而發愁。只要進行簡單幾個步驟就可以輕易地入侵到別人的電腦中。下面,我們就來看看,到底該如何利用WMI通
道。
WMI被利用為虎作倀
前面介紹了WMI的原理,下面我們實際了解下,如何通過WMI進行入侵。在網上,有很多利用WMI的小工具,這里我們就以rots.vbs工具進
行簡單的演示,看一個“菜鳥”黑客如何輕易地入侵。
1.掃描135端口
要尋找可以通過WMI入侵的遠程計算機,只要對135端口進行掃描就可以了。因為WMI服務默認打開的就是135端口。我們本次實例采用的
是NTscan掃描工具,因為它不但可以對IPC$、SMB、WMI這些信息進行掃描,同時還可以對掃描到的遠程賬戶進行弱口令猜測,功能相對
來說比較強大。
運行NTscan,在程序窗口的“配置”區域中進行設置。首先在“起始IP”和“結束”選項中輸入掃描的IP地址范圍,接著選擇“WMI掃描
”選項,并且在“掃描打開端口的主機”選項后輸入“135”,最后點擊“開始”按鈕就開始進行掃描(如圖)。
2.開啟終端服務
找到可以入侵的遠程計算機以后,就可以開始入侵操作了。首先使用的工具是一個名為rots.vbs的腳本程序,通過它可以開啟遠程計算
機的終端服務。腳本會自動判斷目標系統類型,如果不是Windows 2000 Server及以上版本的系統,腳本就會提示是否要取消操作。因為
Windows 2000 Pro以下版本不能安裝終端服務。
然后是開啟終端服務。開啟工具的使用方法非常簡單,命令格式為:cscript rots.vbs <目標IP> <用戶名> <密碼> [服務端口] [自動
重啟選項]
其中,[服務端口]和[自動重啟選項]為可選參數,默認情況下,程序開啟的終端服務端口為3389,如果用戶需要修改,在[服務端口]選
項中填入你要的端口即可,而[自動重啟選項]選項則是在開啟終端服務以后重啟系統用的。
舉個例子:cscript.exerots.vbs 192.168.0.6 Administrator "" 4466 /r
上面這段實例的意思是開啟192.168.0.6這臺遠程計算機的終端服務,并且將端口更改為4466,服務安裝完成后自動重啟。
屏閉135端口防御入侵
從上面的介紹大家都可以看出,整個過程中使用的端口都是135。所以為了防止別人通過WMI進行入侵,我們可以使用防火墻對135端口進
行屏蔽,這樣就可以達到防范類似的入侵。用戶加強自己的賬號密碼強度,也可以有效防范入侵。
關閉135端口的方法
我們使用到十六進制的編輯器,比如:WINHEX、UltraEdit等軟件。運行UltraEdit,通過工具欄上的“打開文檔”按鈕找到系統
SYSTEM32文件夾下的rpcss.dll。接著點擊“搜索”菜單中的“查找”命令,在彈出的窗口中查找“3100330035”這個字符串,找到后將
它替換為“3000300030”,并另存為其他的文件目錄中,建議保存在C盤根目錄下。
重新啟動系統,用啟動盤啟動到DOS狀態下,進入C盤后運行:copyrpcss.dllc:\windows\system32\rpcss.dll,然后重新啟動計算機,
就會發現135端口已經被關閉。
使用網絡防火墻也可以通過端口限制的手段進行屏蔽135端口。我們以天網網絡防火墻為例。打開天網防火墻界面,依次點擊“IP規則管
理→增加規則”,然后在彈出的窗口界面中,在數據包方向中選擇“接收或者發送”,在數據包類型中選擇“TCP”,最后在本地端口中
輸入“135”,然后就是確定退出,最后保存規則即可。以后如果有數據從135端口進行傳輸,天網就會自動進行攔截。
識別代號
世界廠商識別代號
申請WMI的企業應向工作機構提出申請,申請時應如實填寫《世界制造廠識別代號(WMI)申請表》,并提交相應的證明材料。
========
WMI入門 如何使用WMI
知道了WMI是什么以后,肯定想要知道如何使用WMI干活。它能寫“Hello World”嗎?WMI沒那么無聊,它一上來就會問你“你想要什么?”或者“你想要更改什么?”。。。
WMI工具
Windows本身提供了幾個WMI工具供用戶使用,包括WMIC.exe、WBEMTest.exe和WMI Administrative Tools等。前兩個是系統自帶的
,最后一個需要自己下載安裝。不過說實話,我最喜歡WMI Administrative Tools。下載WMI Administrative Tools在這里。下面以WMI?
Administrative Tools為例說明如何使用工具使用WMI。
下載并安裝WMI Administrative Tools之后,會有4個工具,最常用的是其中的WMI CIM Studio。在開始菜單里單擊它,你會發現它
是以網頁形式在IE瀏覽器中打開的。
使用步驟如下:
1、單擊頁面上部的電腦圖標,會顯示一個對話框,單擊“Connect”按鈕,如圖1所示;
image
圖1
2、任何時候出現如圖2所示的登陸對話框,單擊OK按鈕即可;
image
圖2
3、選擇合適的命令空間(這里選擇常用的root\cimv2),然后單擊OK按鈕,如圖3所示;
image
圖3
4、直接雙擊右側類名,或者單擊上部的望遠鏡按鈕,在彈出的查找對話窗中輸入你要查找的完整類名或者類名的一部分,單擊Go按
鈕查找;并在查找結果中選擇你要查看的類名,單擊OK按鈕,如圖4所示;
image
圖4
5、單擊右上部倒數第4個實例按鈕,即可得到本機所有安裝的軟件列表,如圖5所示;
image
圖5
任何WMI類以及實例的查看均可參考以上步驟。?
腳本操作WMI
以前對WMI的操作都是通過VB Script進行的,現在更多人傾向于使用PowerShell來訪問WMI類和對象。下面給出使用PowerShell命令
查詢本機安裝的所有軟件列表的示例:
復制代碼
PS C:\Users\luke> Get-WmiObject -Class Win32_Product | select name
name
----
HelpDesk
Windows Installer Clean Up
XML Notepad 2007
Microsoft Network Monitor 3.4
Microsoft Visual Studio 2010 Service Pack 1
ScreenRecorder
Microsoft Office Visual Web Developer 2007
Microsoft Office Visual Web Developer MUI (English) 2007
...
復制代碼
比使用帶界面的WMI要簡單的多,而且還可以有很多篩選條件。
.Net操作WMI
使用.Net中的高級語言來操作WMI也非常的方便。下面示例演示C#操作WMI獲得本機安裝軟件的列表的代碼:
復制代碼
using System;
using System.Management;
namespace WMIDemo
{
? ? class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? ManagementPath wmiPath = new ManagementPath(@"\\.\root\cimv2:Win32_Product");
? ? ? ? ? ? ManagementClass wmiClass = new ManagementClass(wmiPath);
? ? ? ? ? ? ManagementObjectCollection instances = wmiClass.GetInstances();
? ? ? ? ? ? Console.WriteLine("Name, Vendor");
? ? ? ? ? ? foreach (ManagementObject product in instances)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(String.Format("{0}, {1} ", product["Name"], product["Vendor"]));
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
========
探索PowerShell WMI對象
http://marui.blog.51cto.com/1034148/296083
我記得在xp時代,經常使用的工具有一個叫做WMI Administrative Tools,是微軟官方提供的用來查看、編輯WMI對象的,只是現在好似
不支持新的系統了。但是,在Win7、Server 2008下,這些功能都可以方便的通過PowerShell來完成。
首先,先來認識一下什么是WMI對象:
WMI是作為一個基本的數據庫存在于Windows系統中的。我們可以連接到WMI服務請求查詢其中所包含的信息。WMI包括了系統方方面面的
信息,包括:
? . ?機器信息:制造商、型號、序列號等
? . ?BIOS信息
? . ?OS信息
? . ?CPU信息:種類、制造商、速度、版本
? . ?服務器內存總量
? . ?磁盤信息:容量、格式等
? . ?網絡信息:MAC、IP等
? . ?其他
可以看出WMI內容是多么的豐富,幾乎包括了計算機的方方面面。
利用PowerShell查看WMI成員
在PowerShell中通過以下命令列出WMI對象:
get-wmiObject -list -namespace “root\CIMV2″ <enter>?
需要具體查看某個類的成員,使用下面的命令(例如類"win32_process"):
get-wmiobject -class win32_process -namespace "root\cimv2" | get-member?
可以看到每個有的成員是屬性(Property),而有的則是方法(Method)。
那么,有兩個問題:
為什么要使用-namespace "root\cimv2"??
cimv2是WMI的一個命名空間,每個命名空間下有不同的WMI對象成員。cimv2是其默認設置。可以按照以下步驟進行修改:
控制面板 -> 管理工具 -> 計算機管理 -> 服務和應用程序 -> 右鍵"WMI控制" -> 屬性 -> 高級
參數"-namespace"并非必須,但是,使用它有兩個好處,一是保證我們能準確的查看指定命名空間下的WMI對象,因為有時默認命名空間
并非我們所希望查看的;二是如果不指定命名空間,被設置過的計算機可能拒絕我們的訪問請求。
注:因為我使用英文版系統,上述步驟中個別名稱可能不準確。
在如上圖所示的界面,即可修改默認路徑。
另一個問題是,查看成員的類型有什么用?
如果一個成員是方法,那么,我們可以調用它。如果一個成員是屬性,我們則可以查看它的值。但是,需要注意的是,不同的屬性成員
有不同的數據結構,有的是"System.String",有的是"System.UInt32",有的則是"System.String[ ]",在使用時,應當注意數據格式
,否則會報錯的。
如果我們需要管理網絡中的計算機,則需要指定計算機名稱:
get-wmiObject -list -namespace “root\CIMV2″ -computername 計算機名 <enter>?
好了,現在來具體操作,查看具體信息。
例:
查看BIOS信息
get-wmiobject -class win32_bios -namespace "root\cimv2" <enter>?
運行結果:
?
查看服務信息
get-wmiobject -class win32_service -namespace "root\cimv2" | format-list * <enter>?
查看機器信息
get-wmiobject -class win32_computersystem | format-list * <enter>?
?
在網絡管理環境中的多數情況下,我們可能要查看不同的計算機信息,因此,就需要使用計算機這一參數,例如:
查詢本地計算機的網絡信息
$name="."?
?
$items = get-wmiObject -class win32_NetworkAdapterConfiguration '
-namespace "root\CIMV2" -ComputerName $name | where{$_.IPEnabled -eq “True”} ?
?
foreach($obj in $items) { ?
Write-Host "DHCP Enabled:" $obj.DHCPEnabled ?
Write-Host "IP Address:" $obj.IPAddress ?
Write-Host "Subnet Mask:" $obj.IPSubnet ?
Write-Host "Gateway:" $obj.DefaultIPGateway ?
Write-Host "MAC Address:" $ojb.MACAddress ?
}?
如果查詢對象是其他機器,只需給變量"$name"賦與其他值即可。
例如:
$name=read-host "Enter Computer Name"
write-host "Computer:"$name?
?
$items = get-wmiObject -class win32_NetworkAdapterConfiguration '
-namespace "root\CIMV2" -ComputerName $name | where{$_.IPEnabled -eq “True”} ?
?
foreach($obj in $items) { ?
Write-Host "DHCP Enabled:" $obj.DHCPEnabled ?
Write-Host "IP Address:" $obj.IPAddress ?
Write-Host "Subnet Mask:" $obj.IPSubnet ?
Write-Host "Gateway:" $obj.DefaultIPGateway ?
Write-Host "MAC Address:" $ojb.MACAddress ?
}?
配合更多的查詢命令,便可以方便的寫出一個查詢計算機信息的腳本,在本教程的結束部分,我會盡可能多的提供各種常用腳本。
======== 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
- 上一篇: Mysql非安装版的安装使用相关问题
- 下一篇: MySQL主键学习总结