¿Cómo puedo 'ejecutar como' 'Servicio de red'?

83

Estoy intentando ejecutar un proceso con otra cuenta. Tengo el comando:

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

pero luego esto pide la contraseña. Sin embargo, no hay una contraseña establecida para el servicio de red.

¿Es posible lo que estoy tratando de hacer?

Exitos
fuente

Respuestas:

124

Utilice PsExec.exe de SysInternals, que se ejecuta desde un símbolo del sistema elevado.

por ejemplo, esto abrirá un nuevo símbolo del sistema que se ejecuta como SERVICIO DE RED:

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

esto lo ejecutará como SISTEMA LOCAL:

psexec -i -s cmd.exe 

Puede verificarlos ejecutando whoamidesde el indicador de cmd.

Ver también:

Rory
fuente
@stej - No para mí. Intente ejecutarlo desde un símbolo del sistema elevado, es decir, ejecute su símbolo del sistema como administrador.
Rory
Ni idea, la versión psexec es 2.11. También lo probé en winserver 2012 ejecutándose como servicio en la nube de Azure desde una consola elevada, pero todavía me pide una contraseña.
stej
También me pide una contraseña.
Anderson Fortaleza
1
Esto parece no funcionar en máquinas de 64 bits. Una solución alternativa es utilizar devxexec en su lugar, que funciona.
mellamokb
3
@Rory: Creo que lo descubrí. Para el servicio de red (al menos en un rol de Azure), parece que debe especificar la ruta exacta completa a cmd.exe. Por alguna razón, no tiene una variable PATH predeterminada o algo así ...
mellamokb
15

En el Programador de tareas, cree una tarea para ejecutar la aplicación bajo el usuario de SERVICIO DE RED. Luego puede ejecutar la tarea desde la línea de comando usando

schtasks / run / TN "nombre de tarea"

Donde taskname es el nombre de su tarea.

mhenry1384
fuente
¿Cómo crear esta tarea usando nt Authority \ localservice?
Cobaia
¿Es posible ejecutar mmc.exe como servicio local?
Cobaia
6

Normalmente, solo puede hacerse pasar por cuenta de servicio de un servicio de Windows, como menciona esta publicación :

El truco consiste en ejecutar su código como sistema local y desde allí puede hacerse pasar por las cuentas de servicio utilizando el nombre de usuario adecuado sin contraseña. Una forma de ejecutar su código como la cuenta del sistema local es crear un shell de línea de comandos utilizando la técnica que se muestra a continuación (tomada de esta publicación original ) y ejecutar su ensamblado desde allí. Llamar System.Diagnostics.Debugger.Break()a su código le permite depurar.

Para crear un shell de línea de comando que se ejecute en la cuenta del sistema local, abra una nueva ventana de línea de comando e ingrese:

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

seguido por:

c:\sc start testsvc

Debería haberse abierto una nueva ventana de comando. En esa ventana, ejecute su application.exe; verá que ahora se está ejecutando como la cuenta de usuario del sistema integrada. Una vez que haya terminado de probar, puede eliminar el servicio de prueba que creó ingresando:

c:\sc delete testsvc

Si intenta hacerlo en su propio contexto de usuario, dichos intentos deberían fallar.

Lex Li
fuente
4

He probado

PsExec -i -s cmd.exe

y

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

en PsExec64-v2.2, para win10-home-x64-10.0.14393 y win10-pro-x64-10.0.15063 para usar la consola normal, falló, use la consola elevada, funciona bien

ybdt
fuente
Este enfoque se puede confirmar mediante el comando "whoami", que funciona tanto en cmd.exe como en Powershell.exe.
Tore Aurstad
1

Sé que este es un hilo antiguo, pero es el resultado principal de este problema y quería poder ejecutar un comando usando PowerShell sin tener que instalar ninguna herramienta adicional en nuestro servidor Windows. Se me ocurrió el siguiente script de PowerShell que crea una tarea programada, la ejecuta y luego la elimina. También está escrito para permitirle ejecutar el comando con diferentes cuentas de usuario.

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
fuente