Ako používať SeDebugPrivilege získavať akýkoľvek proces rukoväť

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:185215
Tento článok bol archivovaný. Je publikovaný v aktuálnej podobe a už nebude aktualizovaný.
SUHRN
Nastavením SeDebugPrivilege oprávnenie na bežiaci proces môžetezískať proces rukoväť spustenej aplikácii. Pri získavanízvládnuť procesom, potom môžete určiť PROCESS_ALL_ACCESS vlajkou,ktorý umožní telefónnej rôznych Win32 API na tento procespopisovač, ktoré ste bežne mohli urobiť. Niektoré z Win32 API, ktorá by mohlaúspešne sa nazýva obsahovať nasledujúce:
  • TerminateProcess
  • CreateRemoteThread
Tento článok obsahuje príklad hĺbkové o tom, ako môžete nastaviťSeDebugPrivilege na vašu žiadosť procesu tokenu a že na použiťukončiť iná aplikácia. Toto je rozširujúca téma a silnávedomosti o procese zabezpečenia sa veľmi odporúča.

Diskusia o čo proces prístupu, proces tokeny a Token výsadynie sú zahrnuté do rozsahu pôsobnosti tohto článku. Tento článok predpokladáže čitateľ už chápe tieto pokročilými témami.
DALSIE INFORMACIE
Táto vzorka zahŕňa vytváranie tri samostatné žiadosti jazyka Visual Basic.Každej žiadosti bude postavený jeden v čase, a potom použiť spolu nademonštrovať silu oprávnenie na SeDebugPrivilege proces.

Aplikácia # 1 (Term01.exe)

  1. Vytvorenie nového štandardného EXE projektu v jazyku Visual Basic 5.0.
  2. Zmeňte názov projektu na Term01.
  3. Premenujte Form1 na frmTerm01.
  4. Pridanie tlačidla príkazu na frmTerm01.
  5. Nastaviť popis pre Command1 na "Ukončiť Notepad."
  6. Do frmTerm01, pridajte nasledujúci kód:
          Option Explicit      Private Sub Command1_Click()         ' This is a simple application that attempts         ' to shut down any process that is passed in through         ' the command line.         Call TerminateProcess(CLng(Command$), 0)      End Sub						
  7. Pridať štandardný modul do projektu a premenujte na MdlApi01.
  8. Do MdlApi01, pridajte nasledujúci kód:
          Option Explicit      Declare Function TerminateProcess Lib "kernel32" _         (ByVal hProcess As Long, _         ByVal uExitCode As Long) As Long						
  9. Uloženie projektu a skontrolujte súbor exe (Term01.exe).

Uplatňovanie # 2 (Term02.exe)

  1. Vytvoriť nové štandardné EXE Visual Basic 5.0.
  2. Zmeňte názov projektu na Term02.
  3. Premenujte Form1 na frmTerm02.
  4. Pridanie tlačidla príkazu na frmTerm02.
  5. Nastaviť popis pre Command1 na "Ukončiť Notepad."
  6. Pridať zoznam frmTerm02.
  7. Nastaviť hrúbku ListBox1 3735.
  8. Do frmTerm02, pridajte nasledujúci kód:
          Private Sub Command1_Click()         ' The PID of the application you want to kill will be received         ' through the command line. Convert it to a long so it can be         ' used with the various API calls.         SeDebugSample CLng(Command$)      End Sub						
  9. Pridať štandardný modul do projektu a premenujte na mdlAPI02.
  10. Do modulu mdlApi02, pridajte nasledujúci kód:
          Option Explicit      ' Constants used for various API calls. Refer to MSDN for detailed      ' information about what these constants mean.      Public Const TOKEN_ADJUST_PRIVILEGES = &H20      Public Const TOKEN_QUERY = &H8      Public Const ANYSIZE_ARRAY = 1      Public Const PROCESS_ALL_ACCESS = &H1F0FFF      Public Const SE_DEBUG_NAME = "SeDebugPrivilege"      Public Const SE_PRIVILEGE_ENABLED = &H2      ' Structures used with various API calls.      ' Refer to MSDN for detailed information      ' about what these structures are, and how they are used.      Type LARGE_INTEGER         lowpart As Long         highpart As Long      End Type      Type Luid         lowpart As Long         highpart As Long      End Type      Type LUID_AND_ATTRIBUTES         pLuid As Luid         Attributes As Long      End Type      Type TOKEN_PRIVILEGES         PrivilegeCount As Long         Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES      End Type      ' Refer to the MSDN for detailed information on      ' all of these API calls.      Declare Function CloseHandle Lib "kernel32" _         (ByVal hObject As Long)As Long      Declare Function GetCurrentProcess Lib "kernel32" () As Long      Declare Function OpenProcessToken Lib "advapi32.dll" _         (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _      TokenHandle As Long) As Long      Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias _         "LookupPrivilegeValueA" (ByVal lpSystemName As String, _         ByVal lpName As String, lpLuid As Luid) As Long      Declare Function AdjustTokenPrivileges Lib "advapi32.dll" _         (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, _         NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _         PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long      Declare Function OpenProcess Lib "kernel32" _         (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _         ByVal dwProcessId As Long) As Long      Declare Function TerminateProcess Lib "kernel32" _         (ByVal hProcess As Long, ByVal uExitCode As Long) As Long      ' SeDebugSample shows how to grab the Process Handle of any running      ' Application, and then use the SeDebug privilege to shut it down.      Public Sub SeDebugSample(ApplicationPID As Long)         Dim hProcessID As Long         ' Handle to your sample                                        ' process you are going to                                        ' terminate.         Dim hProcess As Long           ' Handle to your current process                                        ' (Term02.exe).         Dim hToken As Long             ' Handle to your process token.         Dim lPrivilege As Long         ' Privilege to enable/disable         Dim iPrivilegeflag As Boolean  ' Flag whether to enable/disable                                        ' the privilege of concern.         Dim lResult As Long            ' Result call of various APIs.         ' clear the list box first         frmTerm02.List1.Clear         frmTerm02.List1.AddItem "Start SeDebug Sample"         ' set the incoming PID to our internal variable         hProcessID = ApplicationPID         ' get our current process handle         hProcess = GetCurrentProcess         ' show our handle just for fun         frmTerm02.List1.AddItem "Current (Pseudo) Process Handle : " & _                                 Hex(hProcess)         ' open the tokens for this process (Term02.exe)         lResult = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES Or _                                   TOKEN_QUERY, hToken)         ' if OpenProcessToken fails, the return result is zero, test for         ' success here         If (lResult = 0) Then         frmTerm02.List1.AddItem "Error: _                                 Unable To Open Process Token : " _                                 & Err.LastDllError            CloseHandle (hToken)            Exit Sub         Else            ' show success            frmTerm02.List1.AddItem "Opened Process Token : " & hToken         End If         ' Now that you have the token for this process, you want to set         ' the SE_DEBUG_NAME privilege.         lResult = SetPrivilege(hToken, SE_DEBUG_NAME, True)         ' Make sure you could set the privilege on this token.         If (lResult = False) Then            frmTerm02.List1.AddItem _               "Error : Could Not Set SeDebug Privilege on Token Handle"            CloseHandle (hToken)            Exit Sub         Else            frmTerm02.List1.AddItem "Set SeDebug Privilege On Token Handle"         End If         ' Now that you have changed the privileges on the token,         ' have some fun. You can now get a process handle to the         ' process ID that you passed into this program, and         ' demand whatever access you want on it!         hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, hProcessID)         ' Make sure you opened the process so you can do stuff with it         If (hProcess = Null) Then            frmTerm02.List1.AddItem _               "Error : Unable To Open Process : " & Err.LastDllError            CloseHandle (hToken)            Exit Sub         Else            frmTerm02.List1.AddItem "Opened Process : " & hProcess         End If         ' Now turn the SE_DEBUG_PRIV back off,         lResult = SetPrivilege(hToken, SE_DEBUG_NAME, False)         ' Make sure you succeeded in reversing the privilege!         If (lResult = False) Then            frmTerm02.List1.AddItem _              "Error : Unable To Disable SeDebug Privilege On Token Handle"            CloseHandle (hProcess)            CloseHandle (hToken)            Exit Sub         Else            frmTerm02.List1.AddItem _               "Disabled SeDebug Privilege On Token Handle"         End If         ' Now you want to kill the application, which you can do since         ' your process handle to the application includes full access to         ' romp and roam - you got the process handle when you had the         ' SE_DEBUG_NAME privilege enabled!         lResult = TerminateProcess(hProcess, 0)         ' Let's see the result, and go from there.         If (lResult = 0) Then            frmTerm02.List1.AddItem _            "Error : Unable To Terminate Application : " & Err.LastDllError            CloseHandle (hProcess)            CloseHandle (hToken)            Exit Sub         Else            frmTerm02.List1.AddItem "Terminated Application"         End If         ' Close our handles and get out of here.         CloseHandle (hProcess)         CloseHandle (hToken)         ' Finally, let the user know that you have completed the         ' SeDebug Sample.         frmTerm02.List1.AddItem "SeDebug Sample Completed"      End Sub      ' The SetPrivilege function will accept a handle to a token, a      ' privilege, and a flag to either enable/disable that privilege. The      ' function will attempt to perform the desired action upon the token      ' returning TRUE if it succeeded, or FALSE if it failed.      Private Function SetPrivilege(hToken As Long, Privilege As String, _                                    bSetFlag As Boolean) As Boolean         Dim TP As TOKEN_PRIVILEGES          ' Used in getting the current                                             ' token privileges         Dim TPPrevious As TOKEN_PRIVILEGES  ' Used in setting the new                                             ' token privileges         Dim Luid As Luid                    ' Stores the Local Unique                                             ' Identifier - refer to MSDN         Dim cbPrevious As Long              ' Previous size of the                                             ' TOKEN_PRIVILEGES structure         Dim lResult As Long                 ' Result of various API calls         ' Grab the size of the TOKEN_PRIVILEGES structure,         ' used in making the API calls.         cbPrevious = Len(TP)         ' Grab the LUID for the request privilege.         lResult = LookupPrivilegeValue("", Privilege, Luid)         ' If LoopupPrivilegeValue fails, the return result will be zero.         ' Test to make sure that the call succeeded.         If (lResult = 0) Then            SetPrivilege = False         End If         ' Set up basic information for a call.         ' You want to retrieve the current privileges         ' of the token under concern before you can modify them.         TP.PrivilegeCount = 1         TP.Privileges(0).pLuid = Luid         TP.Privileges(0).Attributes = 0         SetPrivilege = lResult         ' You need to acquire the current privileges first         lResult = AdjustTokenPrivileges(hToken, -1, TP, Len(TP), _                                        TPPrevious, cbPrevious)         ' If AdjustTokenPrivileges fails, the return result is zero,         ' test for success.         If (lResult = 0) Then            SetPrivilege = False         End If         ' Now you can set the token privilege information         ' to what the user is requesting.         TPPrevious.PrivilegeCount = 1         TPPrevious.Privileges(0).pLuid = Luid         ' either enable or disable the privilege,         ' depending on what the user wants.         Select Case bSetFlag            Case True: TPPrevious.Privileges(0).Attributes = _                       TPPrevious.Privileges(0).Attributes Or _                       (SE_PRIVILEGE_ENABLED)            Case False: TPPrevious.Privileges(0).Attributes = _                        TPPrevious.Privileges(0).Attributes Xor _                        (SE_PRIVILEGE_ENABLED And _                        TPPrevious.Privileges(0).Attributes)         End Select         ' Call adjust the token privilege information.         lResult = AdjustTokenPrivileges(hToken, -1, TPPrevious, _                                        cbPrevious, TP, cbPrevious)         ' Determine your final result of this function.         If (lResult = 0) Then            ' You were not able to set the privilege on this token.            SetPrivilege = False         Else            ' You managed to modify the token privilege            SetPrivilege = True         End If      End Function						
  11. Uloženie projektu do toho istého adresára ako projekt Term01 a skontrolujte súbor s príponou .exe (Term02.exe).

Uplatňovanie # 3 (MainTest.exe)

  1. Vytvorenie nového štandardného EXE projektu v jazyku Visual Basic 5.0.
  2. Projekt premenujte na MainTest.
  3. Premenovať Form1 na frmTest.
  4. Do formulára pridať tri tlačidlá s príkazmi.
  5. Nastaviť popis pre Command1 "Start Notepad."
  6. Nastaviť popis pre Command2 na "Štart Term01."
  7. Nastaviť popis pre Command3 na "Štart Term02."
  8. Do frmTest, pridajte nasledujúci kód:
          Option Explicit      ' You want to keep the process ID of the NotePad instance      ' that you create      Private iAppPID As Long      Private Sub Command1_Click()         ' Create an instance of the NotePad.exe application.         iAppPID = Shell("Notepad.exe", vbNormalFocus)      End Sub      Private Sub Command2_Click()         ' You will try to terminate the NotePad application by another         ' application, which is running in its own process space.         ' This will FAIL.         Call Shell(App.Path & "\Term01.Exe " & iAppPID, vbNormalFocus)      End Sub      Private Sub Command3_Click()         ' You will try to terminate the NotePad application by another         ' application, which is running in its own process space.         ' However, this application is going to use the SeDebugPrivilege,         ' and will be able to terminate the application without a fuss.         Call Shell(App.Path & "\Term02.Exe " & iAppPID, vbNormalFocus)      End Sub						
  9. Uloženie projektu do toho istého adresára ako projekt Term01 a skontrolujte súbor s príponou .exe (MainTest.exe).

Spustený vzorky

Po postavená a zostavujú tri aplikácie, môžete vidieťdemonštrácia v akcii. V druhom žiadosti (Term02.exe) kódpredpokladá, že uplatňovanie Poznámkový blok (Notepad.exe) je umiestnený vcesta.
  1. Spustite MainTest.exe program. To bude náš "kontrola pad" pre demonštrácie.
  2. Kliknite na tlačidlo Spustiť program Poznámkový blok. To spustí program Poznámkový blok.
  3. Kliknite na tlačidlo Štart Term01. To začne Term01 aplikácia.
  4. Tlačidlo ukončiť Poznámkový blok na Term01 žiadosti. Je to určené k vypnutiu programu Poznámkový blok, ale nebude úspešné.
  5. Zatvoriť aplikáciu Term01.
  6. Kliknite na tlačidlo Štart Term02 na MainTest žiadosť. To bude mať spustite aplikáciu Term02.
  7. Kliknite na tlačidlo ukončiť Poznámkový blok na Term02 žiadosť. Toto začne SeDebugPrivilege demonštrácie, ktorých výsledkom budú Poznámkový blok skončil. Zozname poskytuje vizuálnu spätnú väzbu na to, čo sa deje v procese.
kbDSupport kbdss kbnokeyword

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 185215 – Posledná kontrola: 12/05/2015 08:38:29 – Revízia: 2.0

Microsoft Visual Basic Control Creation Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition

  • kbnosurvey kbarchive kbcode kbhowto kbmt KB185215 KbMtsk
Pripomienky