Question

J'utilise actuellement Vista et j'aimerais effectuer manuellement les mêmes opérations que mon service Windows. Étant donné que le service Windows est exécuté sous le compte système local, j'aimerais émuler le même comportement. En gros, je voudrais exécuter CMD.EXE sous le compte système local.

J'ai trouvé des informations en ligne qui suggéraient de lancer CMD.exe à l'aide de la commande DOS Task Scheduler AT, mais j'ai reçu un avertissement de Vista indiquant que "pour des raisons de sécurité, cette tâche s'exécutait à l'heure mais de manière non interactive." Voici un exemple de commande:

AT 12:00 /interactive cmd.exe

Une autre solution a suggéré de créer un service Windows secondaire via le contrôle de service (sc.exe), qui lance simplement CMD.exe.

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

Dans ce cas, le service ne parvient pas à démarrer et génère le message d'erreur suivant:

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

La troisième suggestion était de lancer CMD.exe via une tâche planifiée. Bien que vous puissiez exécuter des tâches planifiées sous différents comptes, je ne pense pas que le compte système local en soit un.

J'ai aussi essayé d'utiliser les runas, mais je pense que je rencontre la même restriction que celle rencontrée lors de l'exécution d'une tâche planifiée.

Jusqu'ici, chacune de mes tentatives s'est soldée par un échec. Des suggestions?

Était-ce utile?

La solution

Bien que je n’aie pas personnellement testé le système, j’ai de bonnes raisons de croire que la solution AT COMMAND susmentionnée fonctionnera pour XP, 2000 et Server 2003. Selon les tests de mon et Bryant, nous avons constaté que la même approche ne fonctionnait pas. fonctionne avec Vista ou Windows Server 2008 - probablement en raison de la sécurité accrue et du paramètre / interactive obsolète.

Cependant, je suis tombé sur cet article qui illustre l'utilisation de PSTools de SysInternals (acquise par Microsoft en juillet 2006). J'ai lancé la ligne de commande via la commande suivante et, tout à coup, je me suis lancé sous le compte d'administrateur local comme par magie:

psexec -i -s cmd.exe

PSTools fonctionne bien. C'est un ensemble d'outils léger et bien documenté qui fournit une solution appropriée à mon problème.

Un grand merci à ceux qui ont offert leur aide.

Autres conseils

  1. Télécharger psexec.exe à partir de Sysinternals .
  2. Placez-le dans votre lecteur C: \.
  3. Connectez-vous en tant qu'utilisateur standard ou administrateur et utilisez la commande suivante: cd \ . Cela vous place dans le répertoire racine de votre lecteur, où se trouve psexec.
  4. Utilisez la commande suivante: psexec -i -s cmd.exe où -i correspond à interactif et -s correspond à un compte système.
  5. Une fois la commande terminée, un shell cmd sera lancé. Tapez whoami ; il dira "système"
  6. Ouvrez le gestionnaire de tâches. Tuez explorer.exe.
  7. À partir d'un shell de commande avec privilèges élevés, tapez start explorer.exe .
  8. Lorsque vous lancez l'explorateur, notez le nom "système". dans la barre de menu de démarrage. Vous pouvez maintenant supprimer des fichiers du répertoire system32 qui ne peuvent pas être supprimés en tant qu'administrateur ou sur lesquels vous devez vous efforcer de changer les autorisations pour supprimer ces fichiers.

Les utilisateurs qui essaient de renommer ou de supprimer des fichiers système dans n’importe quel répertoire protégé de Windows doivent savoir que tous les fichiers Windows sont protégés par DACLS lorsqu’un nouveau nom est renommé, vous devez changer le propriétaire et remplacer TrustedInstaller, qui est propriétaire du fichier, et donner à tout utilisateur le même nom. un utilisateur qui appartient au groupe d’administrateurs en tant que propriétaire du fichier, puis essaie de le renommer après avoir modifié l’autorisation; cela fonctionnera et pendant que vous exécutez l’explorateur Windows avec les privilèges du noyau, vous êtes quelque peu limité en termes d’accès réseau pour des raisons de sécurité et il est toujours actif. un sujet de recherche pour moi pour y revenir

Vous avez trouvé une réponse ici qui semble résoudre le problème en ajoutant / k Commencez par le paramètre binPath. Cela vous donnerait donc:

sc créez testsvc binpath = "cmd / K start" type = propre type = interagir

Cependant, Ben a déclaré que cela ne fonctionnait pas pour lui et que lorsque je l'ai essayé sous Windows Server 2008, il a créé le processus cmd.exe sous un système local, mais il n'était pas interactif (je ne pouvais pas voir la fenêtre). .

Je ne pense pas qu'il existe un moyen facile de faire ce que vous demandez, mais je me demande pourquoi vous le faites du tout? Êtes-vous simplement en train d'essayer de voir ce qui se passe lorsque vous utilisez votre service? Il semblerait que vous puissiez simplement utiliser la journalisation pour déterminer ce qui se passe au lieu de devoir exécuter le fichier exe en tant que système local ...

Je vous recommanderais de définir le jeu d'autorisations minimales dont votre service a réellement besoin et de l'utiliser, plutôt que le contexte de système local trop privilégié. Par exemple, Service local .

Les services interactifs ne fonctionnent plus - ou du moins ne montrent plus d'interface utilisateur - sous Windows Vista et Windows Server 2008 en raison de isolement de la session 0 .

Une alternative à cela est Processus de piratage si vous allez dans Exécuter en tant que ... (Interactive ne fonctionne pas pour les personnes avec des améliorations de sécurité mais cela n’aura pas d’importance) et lorsque la boîte de dialogue s'ouvre, mettez Service dans le type de boîte et mettre SYSTEM dans la boîte utilisateur et mettre C: \ Users \ Windows \ system32 \ cmd.exe laisser le reste cliquer ok et boch vous avez une fenêtre avec cmd dessus et exécuter en tant que système maintenant faire les autres étapes pour vous-même parce que je vous suggère de les connaître

Utilisation de Secure Desktop pour exécuter cmd.exe en tant que système

Nous pouvons obtenir un accès au noyau via CMD sous Windows XP / Vista / 7 / 8.1 en attachant un débogueur:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. Exécuter CMD en tant qu'administrateur

  2. Utilisez ensuite cette commande dans Elevated:

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. Exécutez ensuite osk (clavier à l'écran). Il ne fonctionne toujours pas avec le niveau d'intégrité du système si vous vérifiez via l'explorateur de processus, mais si vous pouvez utiliser OSK dans une session de service, il s'exécutera en tant que Autorité NT \ SYSTEM

  4. .

alors j’ai eu l’idée que vous deviez l’exécuter sur Secure Desktop.

Démarrez n’importe quel fichier en tant qu’administrateur. Lorsque les invites du contrôle de compte d'utilisateur apparaissent, appuyez simplement sur Win + U et démarrez OSK pour lancer CMD à la place. Ensuite, dans l'invite surélevée, tapez whoami et vous obtiendrez NT Authority \ System . Après cela, vous pouvez démarrer Explorer à partir du shell de commandes système et utiliser le profil Système, mais vous ne pouvez pas vous limiter à ce que vous pouvez faire sur le réseau grâce aux privilèges SYSTEM pour des raisons de sécurité. J'ajouterai d'autres explications plus tard, comme je l'ai découvert il y a un an.

Une brève explication de la façon dont cela se produit

Exécution de Cmd.exe sous Compte système local sans utiliser PsExec . Cette méthode exécute la technique du piège du débogueur qui a été découverte plus tôt. Cette technique a ses propres avantages. Elle peut également être utilisée pour piéger un ver ou un logiciel malveillant artificiel dans le débogueur et exécuter un autre exe à la place pour arrêter la propagation ou les dommages temporaires. Ici, cette clé de registre intercepte le clavier à l'écran dans le débogueur natif de Windows et exécute cmd.exe à la place, mais cmd continuera à s'exécuter avec les privilèges Connecté sur les utilisateurs. Toutefois, si nous exécutons cmd dans session0, nous pouvons obtenir un shell système. Nous ajoutons donc ici une autre idée: nous couvrons la cmd sur un bureau sécurisé. Nous rappelons que le bureau sécurisé s’exécute dans la session 0 sous le compte système et nous obtenons un shell système. Ainsi, chaque fois que vous exécutez une tâche aussi élevée, vous devez répondre aux invites UAC sur un bureau sombre et non interactif. Une fois que vous le voyez, vous devez appuyer sur Win + U . puis sélectionnez OSK pour obtenir CMD.exe s’exécutant sous les privilèges du système local. Il existe encore plus de moyens d’obtenir un accès au système local avec CMD

Il existe un autre moyen. Il existe un programme appelé PowerRun qui permet d’exécuter une cmd élevée. Même avec les droits TrustedInstaller. Il permet à la fois la console et les commandes de l'interface graphique.

si vous pouvez écrire un fichier de commandes qui n'a pas besoin d'être interactif, essayez de l'exécuter en tant que service pour faire ce qui doit être fait.

J'utilise l'utilitaire RunAsTi pour s'exécuter en tant que TrustedInstaller. (privilège élevé). L’utilitaire peut être utilisé même en mode de récupération de Windows (mode que vous entrez en effectuant Maj + Redémarrer ), l’utilitaire psexec ne fonctionne pas. y travailler. Mais vous devez ajouter votre C: \ Windows et votre C: \ Windows \ System32 (pas X: \ Windows et X: \ Windows \ System32 ) vers la variable d’environnement PATH , sinon, RunAsTi ne fonctionnera pas en mode de récupération, il n’affichera que: AdjustTokenPrivileges for SeImpersonateName: tous les privilèges ou groupes référencés ne sont pas attribués à l'appelant .

À l'aide du planificateur de tâches, planifiez une exécution de CMDKEY sous SYSTEM avec les arguments appropriés de / add: / user: et / pass:

Pas besoin d'installer quoi que ce soit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top