Wie laufe ich als "Netzwerkdienst"?


83

Ich versuche, einen Prozess als anderes Konto auszuführen. Ich habe den Befehl:

runas "/user:WIN-CLR8YU96CL5\network service" "abwsx1.exe"

aber dann fragt dies nach dem Passwort. Für den Netzwerkdienst ist jedoch kein Kennwort festgelegt.

Ist das, was ich versuche, möglich?

Antworten:


124

Verwenden Sie PsExec.exe von SysInternals, das an einer Eingabeaufforderung mit erhöhten Rechten ausgeführt wird.

Dies öffnet beispielsweise eine neue Eingabeaufforderung, die als NETWORK SERVICE ausgeführt wird:

psexec -i -u "nt authority\network service" cmd.exe 

Dadurch wird es als LOKALES SYSTEM ausgeführt:

psexec -i -s cmd.exe 

Sie können diese überprüfen, indem Sie sie whoamian der Eingabeaufforderung cmd ausführen.

Siehe auch:


@stej - Nicht für mich. Versuchen Sie, es an einer Eingabeaufforderung mit erhöhten Rechten auszuführen, dh führen Sie Ihre Eingabeaufforderung als Administrator aus.
Rory

Keine Ahnung, die psexec-Version ist 2.11. Ich habe es auch auf Winserver 2012 versucht, der als Azure-Clouddienst von einer erhöhten Konsole ausgeführt wird, aber es wird immer noch nach dem Kennwort gefragt.
Stej

Fragt auch nach dem Passwort für mich.
Anderson Fortaleza

1
Dies scheint auf 64-Bit-Computern nicht zu funktionieren. Eine Problemumgehung besteht darin, stattdessen devxexec zu verwenden, was funktioniert.
Mellamokb

3
@ Rory: Ich denke, ich habe es herausgefunden. Für den Netzwerkdienst (zumindest in einer Azure-Rolle) müssen Sie anscheinend den vollständigen Pfad zu cmd.exe angeben. Aus irgendeinem Grund hat es keine Standard-PATH-Variable oder so ...
Mellamokb

15

Erstellen Sie im Taskplaner eine Aufgabe, um die Anwendung unter dem Benutzer NETWORK SERVICE auszuführen. Sie können die Aufgabe dann über die Befehlszeile mit ausführen

schtasks / run / TN "Aufgabenname"

Wobei Aufgabenname der Name Ihrer Aufgabe ist.


Wie erstelle ich diese Aufgabe mit nt Authority \ Localservice?
Cobaia

Ist es möglich, mmc.exe als lokalen Dienst auszuführen?
Cobaia

6

Sie können sich normalerweise nur als Dienstkonto eines Windows-Dienstes ausgeben, wie in diesem Beitrag erwähnt:

Der Trick besteht darin, Ihren Code als lokales System auszuführen. Von dort aus können Sie sich als Dienstkonten ausgeben, indem Sie den entsprechenden Benutzernamen ohne Kennwort verwenden. Eine Möglichkeit, Ihren Code als lokales Systemkonto auszuführen, besteht darin, eine Befehlszeilen-Shell mithilfe der unten gezeigten Technik (aus diesem ursprünglichen Beitrag entnommen ) zu erstellen und Ihre Assembly von dort aus auszuführen. BerufungSystem.Diagnostics.Debugger.Break() Ihres Codes können Sie debuggen.

Öffnen Sie ein neues Befehlszeilenfenster und geben Sie Folgendes ein, um eine Befehlszeilen-Shell zu erstellen, die unter dem lokalen Systemkonto ausgeführt wird.

c:\sc create testsvc binpath= "cmd /K start" type= own type= interact

gefolgt von:

c:\sc start testsvc

Ein neues Befehlsfenster sollte sich geöffnet haben. Führen Sie in diesem Fenster Ihre application.exe aus. Sie werden sehen, dass Sie jetzt als integriertes Systembenutzerkonto ausgeführt werden. Nachdem Sie den Test abgeschlossen haben, können Sie den von Ihnen erstellten Testdienst löschen, indem Sie Folgendes eingeben:

c:\sc delete testsvc

Wenn Sie dies in Ihrem eigenen Benutzerkontext versuchen, sollten solche Versuche fehlschlagen.


3

Ich habe getestet

PsExec -i -s cmd.exe

und

PsExec -i -u "nt authority\network service" cmd.exe

Wenn Sie unter PsExec64-v2.2 für win10-home-x64-10.0.14393 und win10-pro-x64-10.0.15063 die normale Konsole verwenden möchten, ist die fehlgeschlagene Konsole einwandfrei


Dieser Ansatz kann mit dem Befehl "whoami" bestätigt werden, der sowohl in cmd.exe als auch in Powershell.exe funktioniert.
Tore Aurstad

1

Ich weiß, dass dies ein alter Thread ist, aber es ist das beste Ergebnis für dieses Problem. Ich wollte in der Lage sein, einen Befehl mit PowerShell auszuführen, ohne zusätzliche Tools auf unserem Windows Server installieren zu müssen. Ich habe das folgende PowerShell-Skript entwickelt, das eine geplante Aufgabe erstellt, ausführt und dann löscht. Es wurde auch geschrieben, damit Sie den Befehl unter verschiedenen Benutzerkonten ausführen können.

function InstallDotNetCoreGlobalTool($PackageId, $Action = "install", $User = "NT AUTHORITY\NETWORK SERVICE", $Password = "")
{
    $TaskName = "AzureDotNetCoreGlobalToolConfiguration"
    $Command = "dotnet.exe"
    $Arguments = "tool $Action -g " + $PackageId
    $TaskAction = New-ScheduledTaskAction -Execute $Command -Argument $Arguments

    Write-Host "Setting up scheduled task to run" $Command $Arguments

    Register-ScheduledTask -TaskName $TaskName -User $User -Action $TaskAction
    Start-ScheduledTask -TaskName $TaskName

    Write-Host ""
    Write-Host "Waiting on scheduled task to complete."

    while ((Get-ScheduledTask -TaskName $TaskName).State  -ne 'Ready') 
    {
      # keep waiting
    }

    Write-Host ""

    If((Get-ScheduledTask $TaskName | Get-ScheduledTaskInfo).LastTaskResult -eq 0)
    {
        Write-Host $PackageId $Action "completed successfully"
    }
    else
    {
        If ($Action -eq "install")
        {
            Write-Host $PackageId "failed to $Action. Ensure the proper dependencies have been installed or that it isn't already installed."
        }
        Else {
            Write-Host $PackageId "failed to $Action. It may not currently be installed."
        }        
    }

    Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}

InstallDotNetCoreGlobalTool "Amazon.Lambda.Tools" "uninstall"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.