A 824146 (MS03-039), illetve a 823980 (MS03-026) jelű biztonsági javítás telepítése Visual Basic parancsfájl segítségével távoli állomás-számítógépekre

Összefoglaló

A cikk egy Patchinstall.vbs nevű Microsoft Visual Basic Scripting Edition parancsfájlt is tartalmaz. A parancsfájl bemutatja, hogy a hálózati rendszergazdák miként telepíthetik a 824146 (MS03-039) és a 823980 (MS03-026) jelű biztonsági javításokat Microsoft Windows NT, Windows 2000 és Windows Server 2003 alapú tartományi környezetben a Windows Management Instrumentation (WMI) parancsnyelvi lehetőségeinek kihasználásával olyan távoli állomás számítógépeken, amelyek nem rendelkeznek ezekkel a javításokkal. A Patchinstall.vbs parancsfájl argumentuma egy olyan fájlt (Ipfile.txt), amely bemenetként IP-címeket tartalmaz. A parancsfájl a távoli állomás-számítógép egy előre megadott útvonaláról (C:\Patchinst.exe) telepíti a 824146 (MS03-039) vagy a 823980 (MS03-026) jelű biztonsági javítást. További információt a 824146-os (MS03-039) biztonsági javításról a Microsoft Tudásbázis következő cikkében talál a cikk számára kattintva:

824146 MS03-039: Az RPCSS szolgáltatás puffertúlcsordulása rosszindulatú programok végrehajtására adhat lehetőséget a támadóknak

A 823980-as számú biztonsági javításról további információt a Microsoft Tudásbázis következő cikkében talál a cikk számára kattintva:

823980 MS03-026: Az RPC-felület puffertúlcsordulása programkód végrehajtására adhat lehetőséget

A rendszergazdák számára készült, a tárgyalt biztonsági javításokat nem tartalmazó számítógépeket a hálózat vizsgálatával azonosító eszközről további információt a Microsoft Tudásbázis következő cikkében talál a cikk számára kattintva:

827363 A 823980-as (MS03-026) és a 824146-os (MS03-039) számú biztonsági javítást nem tartalmazó gazdaszámítógépek azonosítása a KB 824146 keresőeszközzel

Megjegyzések

  • A 824146 és 823980 jelű biztonsági javítások sikeres telepítéséhez rendszergazdai jogosultságokkal kell rendelkeznie a távoli célszámítógépeken.
  • Patchinstall.vbs parancsfájl sikeres futtatásához a Microsoft Windows XP alapú célszámítógépeket Windows NT, Windows 2000 vagy Windows Server 2003 tartományba kell csatlakoztatni.
  • A Patchinstall.vbs parancsfájl a Windows Management Instrumentation (WMI) szolgáltatásait használja. A WMI a Distributed Component Object Model (DCOM) technológiára épül. Emiatt a Patchinstall.vbs parancsfájl nem fut le azokon a számítógépeken, melyeken a DCOM szolgáltatást letiltották a Microsoft Security Bulletin MS03-039 vagy MS03-026 jelű cikkében tárgyalt biztonsági rések elleni védelemre szolgáló megoldásként.
  • Azokon a számítógépeken, amelyeken futtatni kívánja a Patchinstall.vbs parancsfájlt, a 824146 vagy a 823980 biztonsági javításnak helyi mappában kell elhelyezkednie, és ezt a mappát a Patch_XP.exe (Windows XP esetén), Patch_W2K.exe (Windows 2000 esetén) vagy Patch_W2K3.exe (Windows Server 2003 esetén) névre kell átnevezni.
  • A Patchinstall.vbs parancsfájl módosításával más javítások is telepíthetők.

További információ

A Patchinstall.vbs parancsfájl az alábbi feladatokat hajtja végre:
  • Beolvassa azon távoli állomás-számítógépek IP-címeinek listáját, melyeken telepíteni kívánja a 824146-os vagy 823980-as biztonsági javítást. A listát a parancsfájl egy ASCII formátumú szövegfájlból (Ipfile.txt) olvassa be, amely egy IP-címlistát tartalmaz (soronként egy IP-címmel). AzIpfile.txt fájl lehet például a KB824146 keresőeszköz által létrehozott Vulnerable.txt naplófájl.
  • Beolvassa a listában szereplő első IP-címet.
  • Megállapítja a célszámítógépen futó Windows rendszer verzióját.
  • A parancsfájlt futtató számítógép Z meghajtóját a célszámítógép C$ megosztásához rendeli.
  • A javítás megfelelő verzióját (a Windows XP, Windows 2000 vagy Windows Server 2003 rendszerre készült verziót) a Z meghajtó-hozzárendelés által a célszámítógép C:\Patchinst.exe elérési útvonalára másolja.
  • Telepíti a javítást, majd automatikusan újraindítja a célszámítógépet. Ehhez semmilyen felhasználói beavatkozásra nincs szükség, és párbeszédpanelek sem jelennek meg, amire a -q -f kapcsolók (felügyelet nélküli telepítési mód) adnak lehetőséget.
  • Megvárja a telepítés befejezését.
  • Megpróbálja törölni a célszámítógépen a C:\Patchinst.exe fájlt.
  • Megszűnteti a Z meghajtó-hozzárendelést.
  • Folytatja az eljárást a listában szereplő következő IP-címmel.
Fontos! A Microsoft javasolja, hogy a parancsfájlt hálózati környezetének megfelelően módosítsa, és a hálózati alkalmazása előtt megfelelő tesztkörnyezetben tesztelje.

A Patchinstall.vbs parancsfájl használatához illessze be az alábbiakban közreadott kódot egy Patchinstall.vbs nevű szövegfájlba, majd futtassa a parancsfájlt az alábbi parancssor szerint:
cscript patchinstall.vbs Ipfile.txt javítások_helyi_elérési_útja
A fenti parancsban az Ipfile.txt az azon távoli állomás-számítógépek IP-címeinek listáját tartalmazó szövegfájl, amelyeken telepíteni kívánja a 824146 vagy a 823980 jelű biztonsági javítást, a javítások_helyi_elérési_útja argumentum pedig a 824146 vagy a 823980 jelű biztonsági javítás átnevezett csomagjait – Windows XP esetén Patch_XP.exe, Windows 2000 esetén Patch_W2k.exe, míg Windows Server 2003 esetén Patch_W2k3.exe – tartalmazó mappa teljes elérési útja.

A Patchinstall.vbs parancsfájl

A Microsoft csak szemléltetési célból ad közre programozási példákat, és azokra sem közvetlen, sem közvetett jótállást nem vállal. Ebbe beleértendő a forgalomba hozhatóságra és az adott célra való megfelelőségre vonatkozó jótállás is. A cikk feltételezi, hogy az olvasó jártas a szemléltetésre szolgáló programozási nyelvben, valamint az eljárások létrehozására és a velük kapcsolatos hibakeresésre szolgáló eszközök használatában. A Microsoft támogatási szakemberei segítséget nyújthatnak egy-egy adott eljárás funkcionalitásának megértésében, de további funkcionalitás hozzáadása céljából nem módosítják a példákat, és nem készítenek az egyéni követelményeknek megfelelő eljárásokat.
' Patchinstall.vbs
' Telepítő parancsfájl az MS03-026 és MS03-039 jelű javításokhoz
' (c) Microsoft 2003
' v1.03 cl

on error resume next

const XP_Patch = "Patch_XP.exe"
const W2k_Patch = "Patch_W2k.exe"
const W2k_Patch = "Patch_W2k.exe"

If right(ucase(wscript.FullName),11)="WSCRIPT.EXE" then
wscript.echo "HIBA: Ezt a parancsfájlt a cscript parancsértelmezővel kell futtatni, például: 'cscript " & wscript.scriptname & "'."
wscript.quit 0
end if

' HASZNÁLAT
if wscript.arguments.count <> 2 then
wscript.echo "Használat: cscript " & wscript.scriptname & " <IpFile.txt> <javítások_helyi_elérési_útja>" & vbCrLf & vbCrLf & _
" A <javítások_helyi_elérési_útja> argumentum az alábbi fájlokat tartalmazó mappa teljes elérési útja kell legyen:" & vbCrLf & _
" " & XP_Patch & vbCrLf & _
" " & W2k_Patch & vbCrLf & _
" " & W2k3_Patch
wscript.quit
end if

ipFile = wscript.arguments(0)
localPathToPatches = wscript.arguments(1)

set onet = createobject("wscript.network")
set ofs = createobject("scripting.filesystemobject")

' Az ipfile elérhetőségének ellenőrzése
set oipFile = ofs.opentextfile(ipFile, 1, false)
if (Err.Number <> 0) then
wscript.echo "Nem nyitható meg a következő fájl: " & ipFile
wscript.quit
end if

' A záró \ karakter hozzáadása, ha hiányzik.
if right(localPathToPatches, 1) <> "\" then
localPathToPatches = localPathToPatches & "\"
end if

' Figyelem! A cim_datafile változó nem támogatja az UNC elérési útvonalakat,
' így mindent meghajtó-hozzárendeléssel kell kezelni.
if left(localPathToPatches, 2) = "\\" then
wscript.echo "A <javítások_helyi_elérési_útjának_meghajtójele> nem lehet UNC elérési útvonal. Csatlakoztasson egy helyi meghajtót az elérési úthoz."
wscript.quit
end if

exeWinXP = ofs.getfile(localPathToPatches + XP_Patch).name
exeW2k = ofs.getfile(localPathToPatches + W2k_Patch).name
exeW2k3 = ofs.getfile(localPathToPatches + W2k3_Patch).name

' A javítások elérhetőségének ellenőrzése
if ((len(exeWinXP) = 0) OR (len(exeW2k) = 0) OR (len(exeW2k3) = 0)) then
wscript.echo "Nem találhatók a javításokat tartalmazó fájlok."
wscript.echo "Ellenőrizze, hogy a <javítások_helyi_elérési_útja> mappában megtalálható-e az alábbi fájlok mindegyike:" & vbCrLf & _
" " & XP_Patch & vbCrLf & _
" " & W2k_Patch & vbCrLf & _
" " & W2k3_Patch
wscript.quit
end if


set osvcLocal = getobject("winmgmts:root\cimv2")

' A hibakezelési kód mindig abban a függvényben található, amely a hibát generálhatja.
on error resume next

while not oipFile.atEndOfStream
ip = oipFile.ReadLine()
wscript.echo vbCrLf & "Csatlakozás a következő IP-címhez: " & ip & "..."

Err.Clear
set osvcRemote = GetObject("winmgmts:\\" & ip & "\root\cimv2")

if (Err.Number <> 0) then
wscript.echo vbCrLf & "Nem sikerült kapcsolódni a következő IP-címhez: " & ip & "..."
else

exeCorrectPatch = detectOSPatch(osvcRemote)
if (exeCorrectPatch <> "") then
' Telepítés a távoli számítógépen.
wscript.echo "A következő javítás telepítése: " & exeCorrectPatch & "..."

onet.mapnetworkdrive "z:", "\\" & ip & "\C$"
set osourceFile = osvcLocal.get("cim_datafile=""" & replace(localPathToPatches, "\", "\\") & exeCorrectPatch & """")
ret = osourceFile.Copy("z:\\Patchinst.exe")

if (ret <> 0 and ret <> 10) then
' Hiba történt, de annak típusa nem "a fájl már létezik".
wscript.echo "Nem sikerült a másolás a következő címre: " & ip & " – a hiba: " & ret
else
set oprocess = osvcRemote.Get("win32_process")

' A telepítés elkezdése felhasználói beavatkozás nélkül, és az újraindítás kényszerítése a folyamat végén.
ret = oprocess.create("c:\\Patchinst.exe -q -f")
if (ret <> 0) then
wscript.echo "Folyamatindítási hiba a következő IP-címen: " & ip & ": " & ret
else
' A már átmásolt fájlra való hivatkozás tárolása.
set odestFile = osvcLocal.get("cim_datafile=""z:\\Patchinst.exe""")

' Megvárja a telepítés befejezését.
for waitTime = 0 to 120 ' Várakozás a telepítés befejezésére legfeljebb 2 percig
wscript.Sleep 1000 ' Egy másodpercnyi várokazás.
' Az ideiglenes fájl törlése, amint az felszabadult.
if (odestFile.Delete() = 0) then
exit for
end if
next ' Különben újabb ciklus, a várakozás folytatása...

wscript.echo "A telepítés sikeresen befejeződött."

end if ' A folyamat létrehozása sikerült
end if ' A másolás sikerült.

onet.removenetworkdrive "z:", true
end if ' A parancsfájl tudja, mely javítást kell telepíteni.
end if ' Folytatás a következő, majd az azt követő IP-címmel...
wend

oipFile.close()

' Tisztítás, a meghajtó-hozzárendelés eltávolítása (az ellenőrzés most szükséges, mivel lehet, hogy a csatlakoztatás meg sem történt).
if ofs.folderexists("z:\") then
onet.removenetworkdrive "z:", true
end if

wscript.echo vbCrLf & "A javítás telepítése befejeződött. Kilépés."

function detectOSPatch(osvcRemote)

set oOSInfo = osvcRemote.InstancesOf("Win32_OperatingSystem")
' Mindig csupán egyetlen példány kerül visszaadásra (a jelenleg aktív operációs rendszeré), függetlenül attól, hogy az alábbi egy foreach ciklus:
for each objOperatingSystem in oOSInfo

if (objOperatingSystem.OSType <> 18) then
' Győződjön meg arról, hogy a számítógép Windows NT alapú.
wscript.echo "A(z) " & ip & " címen nem Windows XP, Windows 2000 vagy Windows 2003 Server számítógép található."
else
if (objOperatingSystem.Version = "5.0.2195") then
' Windows 2000 SP2, SP3, SP4.
if (objOperatingSystem.ServicePackMajorVersion = 2) or (objOperatingSystem.ServicePackMajorVersion = 3) or _
(objOperatingSystem.ServicePackMajorVersion = 4) then
systemType = exeW2k
end if

elseif (objOperatingSystem.Version = "5.1.2600") then
' Windows XP RTM, SP1.
if (objOperatingSystem.ServicePackMajorVersion = 0) or (objOperatingSystem.ServicePackMajorVersion = 1) then
systemType = exeWinXP
end if

elseif (objOperatingSystem.Version = "5.2.3790") then
' Windows Server 2003 RTM
if (objOperatingSystem.ServicePackMajorVersion = 0) then
systemType = exeW2k3
end if
end if

if (systemType = "") then
' A számítógép Windows NT alapú, de a rajta lévő szervizcsomag érvénytelen.
wscript.echo "A javítás nem telepíthető a következő IP-címre: " & ip & " –- nem támogatott operációs rendszer verzió: " & objOperatingSystem.Caption & " SP" & _
objOperatingSystem.ServicePackMajorVersion & "("& objOperatingSystem.Version & ")"
end if
end if

next

detectOSPatch = systemType

end function

Tulajdonságok

Cikkazonosító: 827227 - Utolsó ellenőrzés: 2009. jún. 16. - Verziószám: 1

Visszajelzés