90 votes

Comment puis-je m'exécuter en tant que "service réseau" ?

J'essaie d'exécuter un processus en tant qu'autre compte. J'ai la commande :

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

mais ensuite cela demande le mot de passe. Cependant, il n'y a pas de mot de passe défini pour le service réseau.

Ce que j'essaie de faire est-il possible ?

142voto

Rory Points 13087

Utilisez PsExec.exe de SysInternals, à partir d'une invite de commande élevée.

Par exemple, cela ouvrira une nouvelle invite de commande sous le nom de NETWORK SERVICE :

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

ceci le fera fonctionner en tant que SYSTEME LOCAL :

psexec -i -s cmd.exe 

Vous pouvez les vérifier en exécutant whoami à partir de l'invite cmd.

Voir aussi :

17voto

mhenry1384 Points 3608

Dans le planificateur de tâches, créez une tâche pour exécuter l'application sous l'utilisateur NETWORK SERVICE. Vous pouvez ensuite exécuter la tâche à partir de la ligne de commande en utilisant

schtasks /run /TN "taskname"

Nom de la tâche est le nom de votre tâche.

0 votes

Comment créer cette tâche en utilisant l'autorité nt \localservice ?

0 votes

Est-il possible d'exécuter mmc.exe en tant que localservice ?

6voto

Lex Li Points 18214

Vous ne pouvez vous faire passer pour un compte de service qu'à partir d'un service Windows typique, tel que ce poste mentions :

L'astuce consiste à exécuter votre code en tant que système local et à partir de là, vous pouvez vous faire passer pour les comptes de service en utilisant le nom d'utilisateur approprié sans mot de passe. Une façon d'exécuter votre code en tant que compte Système Local est de créer un shell de ligne de commande en utilisant la technique montrée ci-dessous (tirée de cet article) poste original ), et exécutez votre assemblage à partir de là. Appeler System.Diagnostics.Debugger.Break() dans votre code vous permet de déboguer.

Pour créer un shell de ligne de commande qui s'exécute sous le compte système local, ouvrez une nouvelle fenêtre de ligne de commande et entrez :

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

suivi par :

c:\sc start testsvc

Une nouvelle fenêtre de commande devrait s'ouvrir. Dans cette fenêtre, exécutez votre application.exe - vous verrez que vous êtes maintenant exécuté en tant que compte utilisateur du système intégré. Après avoir terminé les tests, vous pouvez supprimer le service de test que vous avez créé en entrant :

c:\sc delete testsvc

Si vous essayez de le faire dans votre propre contexte utilisateur, ces tentatives devraient échouer.

5voto

ybdt Points 41

J'ai testé

PsExec -i -s cmd.exe

et

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

sur PsExec64-v2.2, pour win10-home-x64-10.0.14393 et win10-pro-x64-10.0.15063 l'utilisation de la console normale échoue, l'utilisation de la console élevée fonctionne bien

0 votes

Cette approche peut être confirmée en utilisant la commande "whoami", qui fonctionne à la fois dans cmd.exe et Powershell.exe.

1voto

kmcbrearty Points 21

Je sais que c'est un vieux fil de discussion mais c'est le premier résultat pour ce problème. Je voulais pouvoir exécuter une commande à l'aide de PowerShell sans avoir à installer d'autres outils sur notre serveur Windows. J'ai trouvé le script PowerShell suivant qui crée une tâche planifiée, l'exécute, puis la supprime. Il est également écrit pour vous permettre d'exécuter la commande sous différents comptes d'utilisateur.

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"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X