Jesteś obecnie w trybie offline. Czekamy na ponowne połączenie z Internetem.

Jak użyć skryptu języka Visual Basic do zainstalowania poprawki zabezpieczeń 824146 (MS03-039) lub 823980 (MS03-026) na zdalnych komputerach-hostach

Zakończono świadczenie pomocy technicznej dla systemu Windows XP

Firma Microsoft zakończyła świadczenie pomocy technicznej dla systemu Windows XP 8 kwietnia 2014. Ta zmiana wpłynęła na Twoje aktualizacje oprogramowania i opcje zabezpieczeń. Dowiedz się, co to oznacza dla Ciebie i jak zapewnić sobie kontynuację ochrony.

Świadczenie pomocy technicznej dla systemu Windows Server 2003 zakończono 14 lipca 2015.

Firma Microsoft zakończyła świadczenie pomocy technicznej dla systemu Windows Server 2003 14 lipca 2015. Ta zmiana wpłynęła na Twoje aktualizacje oprogramowania i opcje zabezpieczeń. Dowiedz się, co to oznacza dla Ciebie i jak zapewnić sobie kontynuację ochrony.

Streszczenie
Ten artykuł zawiera przykładowy skrypt języka Microsoft Visual Basic Scripting Edition o nazwie Patchinstall.vbs. Ten skrypt jest przykładem użycia przez administratora sieci usługi Instrumentacja zarządzania Windows (WMI, Windows Management Instrumentation) do instalowania poprawki zabezpieczeń 824146 (MS03-039) lub 823980 (MS03-026) na zdalnych komputerach-hostach, na których ta poprawka nie jest instalowana w środowisku domeny systemu Microsoft Windows NT, Windows 2000 lub Windows Server 2003. Skrypt Patchinstall.vbs używa pliku (Ipfile.txt) zawierającego adresy IP jako danych wejściowych i instaluje poprawkę zabezpieczeń 824146 (MS03-039) lub 823980 (MS03-026) ze znanej lokalizacji na zdalnym komputerze-hoście (C:\Patchinst.exe). Aby uzyskać dodatkowe informacje dotyczące poprawki zabezpieczeń 824146 (MS03-039), kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
824146 MS03-039: Przepełnienie buforu w usłudze RPCSS może pozwolić atakującemu na uruchamianie szkodliwych programów
Aby uzyskać dodatkowe informacje dotyczące poprawki zabezpieczeń 823980, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
823980 MS03-026: Przekroczenie buforu w interfejsie RPC może umożliwiać uruchomienie kodu źródłowego
Aby uzyskać dodatkowe informacje dotyczące narzędzia, którego administratorzy sieci mogą używać do skanowania swoich sieci w poszukiwaniu komputerów, na których nie zainstalowano tych poprawek zabezpieczeń, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
827363 Jak używać narzędzia do skanowania KB 824146 w celu zidentyfikowania komputerów-hostów, na których nie zainstalowano poprawek zabezpieczeń 823980 (MS03-026) oraz 824146 (MS03-039)

Uwagi

  • Do pomyślnego zainstalowania poprawki zabezpieczeń 824146 lub 823980 na zdalnych komputerach docelowych potrzebne są uprawnienia administracyjne na tych komputerach.
  • Aby pomyślnie użyć skryptu Patchinstall.vbs, komputery docelowe z systemem Microsoft Windows XP muszą być dołączone do domeny systemu Windows NT, Windows 2000 lub Windows Server 2003.
  • Skrypt Patchinstall.vbs używa usługi Instrumentacja zarządzania Windows (WMI). Usługa WMI jest zależna od modelu obiektów składników rozproszonych (DCOM). Dlatego skrypt Patchinstall.vbs nie działa na komputerach docelowych, na który model DCOM został wyłączony w celu obejścia luki opisanej w biuletynach Microsoft Security Bulletin MS03-039 i MS03-026.
  • Pakiet poprawki zabezpieczeń 824146 lub 823980 musi znajdować się w folderze lokalnym na komputerze, na którym jest uruchamiany skrypt Patchinstall.vbs, a jego nazwa musi być zmieniona na Patch_XP.exe (w przypadku systemu Windows XP), Patch_W2K.exe (w przypadku systemu Windows 2000) lub Patch_W2K3.exe (w przypadku systemu Windows Server 2003).
  • Skrypt Patchinstall.vbs można tak zmodyfikować, aby instalował inne poprawki.
Więcej informacji
Skrypt Patchinstall.vbs wykonuje następujące zadania:
  • Odczytuje listę adresów IP zdalnych komputerów-hostów, na których ma być zainstalowana poprawka zabezpieczeń 824146 lub 823980. Skrypt uzyskuje tę listę z pliku tekstowego ASCII (Ipfile.txt) zawierającego listę adresów IP (jeden adres IP w każdym wierszu). Na przykład jako pliku Ipfile.txt można użyć pliku Vulnerable.txt z narzędzia do skanowania KB824146.
  • Odczytuje pierwszy adres IP z listy.
  • Określa wersję systemu Windows na komputerze docelowym.
  • Mapuje dysk Z na komputerze skryptu na dysk C$ na komputerze docelowym.
  • Kopiuje poprawną wersję poprawki (dla systemu Windows XP, Windows 2000 lub Windows Server 2003) do lokalizacji C:\Patchinst.exe na komputerze docelowym (przy użyciu mapowania dysku Z).
  • Powoduje zainstalowanie poprawki, a następnie automatycznie uruchamia ponownie komputery, nie wymagając wprowadzania żadnych danych przez użytkownika ani nie wyświetlając żadnych okien dialogowych, przy użyciu przełączników -q -f (tryb instalacji nienadzorowanej).
  • Czeka na ukończenie procesu instalacji.
  • Próbuje usunąć plik C:\Patchinst.exe z komputera docelowego.
  • Usuwa mapowanie dysku Z.
  • Przetwarza następny adres IP z listy.
Ważne: Firma Microsoft zaleca dostosowanie skryptu przykładowego do używanego środowiska sieciowego i przetestowanie skryptu w środowisku testowym przed jego zastosowaniem w środowisku produkcyjnym.

Aby użyć skryptu Patchinstall.vbs, należy wkleić następujący skrypt w pliku tekstowym o nazwie Patchinstall.vbs. Następnie należy uruchomić skrypt Patchinstall.vbs przy użyciu następującego wiersza polecenia:
cscript patchinstall.vbs Ipfile.txt lokalna_ścieżka_do_poprawek
W tym poleceniu Ipfile.txt to plik tekstowy zawierający listę adresów IP zdalnych komputerów-hostów, na których ma być zainstalowana poprawka zabezpieczeń 824146 lub 823980. Lokalna_ścieżka_do_poprawek to pełna ścieżka folderu zawierającego pakiet poprawki zabezpieczeń 824146 lub 823980 (o nazwie zmienionej na Patch_XP.exe w przypadku systemu Windows XP, Patch_W2k.exe w przypadku systemu Windows 2000 i Patch_W2k3.exe w przypadku systemu Windows Server 2003).

Skrypt Patchinstall.vbs

Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost lub domyślnie, w tym także, bez ograniczeń, ustawowej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy Pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu zasad działania określonej procedury, ale nie będą modyfikować tych przykładów ani dodawać żadnej funkcji i konstruować nowych procedur w celu dostosowania ich do określonych potrzeb użytkownika.
' Patchinstall.vbs' Patch installation script for MS03-026 and MS03-039' (c) Microsoft 2003' v1.03 clon error resume nextconst XP_Patch = "Patch_XP.exe"const W2k_Patch = "Patch_W2k.exe"const W2k3_Patch = "Patch_W2k3.exe"If right(ucase(wscript.FullName),11)="WSCRIPT.EXE" then     wscript.echo "ERROR: You must run this script using cscript, for example 'cscript " & wscript.scriptname & "'."     wscript.quit 0end if' USAGEif wscript.arguments.count <> 2 then     wscript.echo "Usage: cscript " & wscript.scriptname & " <IpFile.txt> <LocalPathToPatches>" & vbCrLf & vbCrLf & _     "  <LocalPathToPatches> must be a full path of a folder that contains all of these files:" & vbCrLf & _     "      " & XP_Patch & vbCrLf & _      "      " & W2k_Patch & vbCrLf & _      "      " & W2k3_Patch     wscript.quitend ifipFile = wscript.arguments(0)localPathToPatches = wscript.arguments(1)set onet = createobject("wscript.network")set ofs = createobject("scripting.filesystemobject")' Verify that ipfile is accessible.set oipFile = ofs.opentextfile(ipFile, 1, false)if (Err.Number <> 0) then     wscript.echo "Cannot open " & ipFile     wscript.quitend if' Make sure to end with a \ character.if right(localPathToPatches, 1) <> "\" then     localPathToPatches = localPathToPatches & "\"end if'Note that cim_datafile does not support UNC paths'so everything must be handled through mapped drives.if left(localPathToPatches, 2) = "\\" then     wscript.echo "<pathToExecutable> cannot be a UNC path, please map a drive locally"     wscript.quitend ifexeWinXP = ofs.getfile(localPathToPatches + XP_Patch).nameexeW2k = ofs.getfile(localPathToPatches + W2k_Patch).nameexeW2k3 = ofs.getfile(localPathToPatches + W2k3_Patch).name' Verify that the patches are accessible.if ((len(exeWinXP) = 0) OR (len(exeW2k) = 0) OR (len(exeW2k3) = 0)) then     wscript.echo "Cannot find patch files."     wscript.echo "Please verify that the <LocalPathToPatches> folder contains all of these files:" & vbCrLf & _     "      " & XP_Patch & vbCrLf & _      "      " & W2k_Patch & vbCrLf & _      "      " & W2k3_Patch     wscript.quitend ifset osvcLocal = getobject("winmgmts:root\cimv2")'The error-handling code is below the function that may throw one - execute it.on error resume nextwhile not oipFile.atEndOfStream     ip = oipFile.ReadLine()     wscript.echo vbCrLf & "Connecting to " & ip & "..."     Err.Clear     set osvcRemote = GetObject("winmgmts:\\" & ip & "\root\cimv2")     if (Err.Number <> 0) then          wscript.echo "Failed to connect to " & ip & "."     else          exeCorrectPatch = detectOSPatch(osvcRemote)          if (exeCorrectPatch <> "") then               ' Lay the bits on the remote computer.               wscript.echo "Installing patch " & 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                    ' Failure detected and failure was not "file already exists."                    wscript.echo "Failed copy to " & ip & " - error: " & ret               else                    set oprocess = osvcRemote.Get("win32_process")                         ' Start the installation without user interaction, and force a restart after completion.                    ret = oprocess.create("c:\\Patchinst.exe -q -f")                    if (ret <> 0) then                         wscript.echo "Failed to start process on " & ip & ": " & ret                    else                         ' Get a reference to the file that was copied.                         set odestFile = osvcLocal.get("cim_datafile=""z:\\Patchinst.exe""")                         ' Wait for the installation to complete.                         for waitTime = 0 to 120     ' Lay and wait--up to two minutes for the installation to complete.                              wscript.Sleep 1000     ' Sleep one second.                              ' Delete temporary file as soon as possible after it is freed.                              if (odestFile.Delete() = 0) then                                   exit for                              end if                         next ' Otherwise, loop again and keep waiting...                         wscript.echo "Installation successful."                    end if     'Create process succeeded.               end if     'Copy succeeded.               onet.removenetworkdrive "z:", true          end if      ' The script knows which patch to install.     end if ' Do the next IP address, then the next IP address... wendoipFile.close()'Clean up, remove drive mapping (check this time, because it may not have been mapped).if ofs.folderexists("z:\") then     onet.removenetworkdrive "z:", trueend ifwscript.echo vbCrLf & "Patching complete. Exiting."function detectOSPatch(osvcRemote)     set oOSInfo = osvcRemote.InstancesOf("Win32_OperatingSystem")     'Only one instance is ever returned (the currently active OS), even though the following is a foreach.     for each objOperatingSystem in oOSInfo          if (objOperatingSystem.OSType <> 18) then               ' Make sure that this computer is Windows NT-based.               wscript.echo ip & " is not a Windows XP, Windows 2000, or Windows 2003 Server computer."          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                     'This was a Windows NT-based computer, but not with a valid service pack.                    wscript.echo "Could not patch " & ip & " - unhandled OS version: " & objOperatingSystem.Caption & " SP" & _				objOperatingSystem.ServicePackMajorVersion & "("& objOperatingSystem.Version & ")"               end if          end if     next     detectOSPatch = systemTypeend function
Właściwości

Identyfikator artykułu: 827227 — ostatni przegląd: 08/09/2005 13:57:07 — zmiana: 5.4

Microsoft Windows Server 2003, Datacenter Edition (32-bit x86), Microsoft Windows Server 2003, Enterprise Edition (32-bit x86), Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows Server 2003, Web Edition, Microsoft Windows XP Professional, Microsoft Windows XP Tablet PC Edition, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Server

  • kbinfo KB827227
Opinia
y:none;" onerror="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">