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?

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ż:


@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.


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ść.


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


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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.