Jak „działać jako” usługa sieciowa ”?

83

Próbuję uruchomić proces na innym koncie. Mam polecenie:

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

ale wtedy pojawia się prośba o podanie hasła. Jednak nie ma ustawionego hasła dla usługi sieciowej.

Czy to, co próbuję zrobić, jest możliwe?

Exitos
źródło

Odpowiedzi:

126

Użyj PsExec.exe z SysInternals , uruchamianego z wiersza polecenia z podwyższonym poziomem uprawnień.

np. spowoduje to otwarcie nowego wiersza poleceń działającego jako USŁUGA SIECIOWA:

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

to uruchomi go jako SYSTEM LOKALNY:

psexec -i -s cmd.exe 

Możesz to sprawdzić, uruchamiając whoamipolecenie cmd.

Zobacz też:

Rory
źródło
@stej - Nie dla mnie. Spróbuj uruchomić go z wiersza polecenia z podwyższonym poziomem uprawnień, tj. Uruchom wiersz polecenia jako Administrator.
Rory
Nie mam pojęcia, wersja psexec to 2.11. Wypróbowałem go również na winserver 2012 działającym jako usługa w chmurze Azure z podwyższonej konsoli, ale nadal prosi o hasło.
stej
Pyta mnie też o hasło.
Anderson Fortaleza
1
Wydaje się, że nie działa to na komputerach 64-bitowych. Obejściem problemu jest użycie zamiast tego devxexec , który działa.
mellamokb
3
@Rory: Myślę, że to rozgryzłem. W przypadku usługi sieciowej (przynajmniej w roli platformy Azure) wydaje się, że musisz określić pełną dokładną ścieżkę do cmd.exe. Z jakiegoś powodu nie ma domyślnej zmiennej PATH czy czegoś takiego ...
mellamokb
16

W Harmonogramie zadań utwórz zadanie, aby uruchomić aplikację w ramach użytkownika NETWORK SERVICE. Następnie możesz uruchomić zadanie z wiersza poleceń za pomocą

schtasks / run / TN "nazwa zadania"

Gdzie TaskName jest nazwa zadania.

mhenry1384
źródło
jak utworzyć to zadanie przy użyciu uprawnienia nt \ usługa lokalna?
Cobaia
Czy można uruchomić mmc.exe jako usługę lokalną?
Cobaia
6

Możesz podszywać się pod konto usługi tylko z usługi systemu Windows, jak wspomniano w tym poście :

Sztuczka polega na tym, aby uruchomić kod jako system lokalny i stamtąd można podszywać się pod konta usługi, używając odpowiedniej nazwy użytkownika bez hasła. Jednym ze sposobów uruchomienia kodu jako konta systemu lokalnego jest utworzenie powłoki wiersza poleceń przy użyciu techniki pokazanej poniżej (zaczerpniętej z tego oryginalnego postu ) i wykonanie z tego miejsca asemblacji. Wywołanie System.Diagnostics.Debugger.Break()kodu umożliwia debugowanie.

Aby utworzyć powłokę wiersza poleceń działającą na lokalnym koncie systemowym, otwórz nowe okno wiersza poleceń i wprowadź:

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

śledzony przez:

c:\sc start testsvc

Powinno się otworzyć nowe okno poleceń. W tym oknie uruchom plik application.exe - zobaczysz, że teraz działa jako wbudowane konto użytkownika systemu. Po zakończeniu testów możesz usunąć utworzoną usługę testową, wpisując:

c:\sc delete testsvc

Jeśli spróbujesz to zrobić we własnym kontekście użytkownika, takie próby powinny się nie powieść.

Lex Li
źródło
4

Testowałem

PsExec -i -s cmd.exe

i

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

na PsExec64-v2.2, dla win10-home-x64-10.0.14393 i win10-pro-x64-10.0.15063, aby używać normalnej konsoli, nie udało się, użyj podwyższonej konsoli, działa dobrze

ybdt
źródło
Takie podejście można potwierdzić za pomocą polecenia „whoami”, które działa zarówno w przypadku cmd.exe, jak i Powershell.exe.
Tore Aurstad
1

Wiem, że jest to stary wątek, ale jest to najlepszy wynik tego problemu i chciałem mieć możliwość uruchomienia polecenia przy użyciu programu PowerShell bez konieczności instalowania żadnych dodatkowych narzędzi na naszym serwerze Windows Server. Wymyśliłem następujący skrypt PowerShell, który tworzy zaplanowane zadanie, uruchamia je, a następnie usuwa. Został również napisany, aby umożliwić uruchamianie polecenia na różnych kontach użytkowników.

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"
kmcbrearty
źródło