Comment exécutez-vous CMD.exe sous le compte système local?

144

J'utilise actuellement Vista et je souhaite effectuer manuellement les mêmes opérations que mon service Windows. Étant donné que le service Windows fonctionne sous le compte système local, je voudrais émuler ce même comportement. Fondamentalement, je voudrais exécuter CMD.EXE sous le compte système local.

J'ai trouvé des informations en ligne qui suggèrent de lancer CMD.exe à l'aide de la commande DOS Task Scheduler AT, mais j'ai reçu un avertissement Vista que "en raison des améliorations de sécurité, cette tâche s'exécutera à ce moment-là, sauf mais pas de manière 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 démarre pas 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 fasse partie.

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

Jusqu'à présent, chacune de mes tentatives s'est soldée par un échec. Aucune suggestion?

Ben Griswold
la source

Réponses:

221

Bien que je n'ai pas personnellement testé, j'ai de bonnes raisons de croire que la solution AT COMMAND indiquée ci-dessus fonctionnera pour XP, 2000 et Server 2003. Selon les tests de My et Bryant, nous avons identifié que la même approche ne fonctionne pas avec Vista ou Windows Server 2008 - probablement en raison d'une sécurité accrue et du commutateur / interactive obsolète.

Cependant, je suis tombé sur cet article qui démontre l'utilisation de PSTools de SysInternals (qui a été acquis par Microsoft en juillet 2006.) J'ai lancé la ligne de commande via ce qui suit et soudain je fonctionnais sous le compte administrateur local comme par magie:

psexec -i -s cmd.exe

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

Un grand merci à ceux qui ont offert leur aide.

Ben Griswold
la source
11
J'aime mieux cela avec -dajouté, afin de pouvoir continuer à utiliser la console à partir de laquelle je l'ai lancé.
SamB
1
J'ai juste essayé sur Vista x64 et j'ai obtenu "Le service PsExec fonctionnant sur ... est une version incompatible." Essayé directement depuis \\ live.sysinternals.com \ tools \ psexec et le dernier binaire. Il ne semble pas y avoir de version x64
ZXX
52
  1. Téléchargez psexec.exe depuis Sysinternals .
  2. Placez-le dans votre lecteur C: \.
  3. Ouverture de session en tant qu'utilisateur standard ou admin 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.exeoù -i est pour interactif et -s pour le compte système.
  5. Une fois la commande terminée, un shell cmd sera lancé. Type whoami; il dira «système»
  6. Ouvrez le gestionnaire de tâches. Tuez explorer.exe.
  7. À partir d'un type de shell de commande élevé start explorer.exe.
  8. Lorsque l'explorateur est lancé, notez le nom "système" dans la barre de menu de démarrage. Vous pouvez maintenant supprimer certains fichiers du répertoire system32 que vous ne pouvez pas supprimer en tant qu'administrateur ou, en tant qu'administrateur, vous devrez essayer de modifier 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 lors du changement de nom d'un fichier, vous devez changer le propriétaire et remplacer TrustedInstaller qui possède le fichier et rendre tout utilisateur comme un utilisateur qui appartient au groupe administrateur en tant que propriétaire du fichier, puis essayez 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 au réseau pour des raisons de sécurité et c'est toujours un sujet de recherche pour moi de récupérer l'accès

corbeau
la source
J'utilise cette astuce, pour démarrer l'explorateur en tant qu'utilisateur élevé souvent. Surtout, lors de la connexion via VNC à un PC, où il est nécessaire de définir les paramètres réseau, par exemple. +1 de moi
TPAKTOPA
Cette astuce semble désormais invalide. Mon système d'exploitation est Windows 7 SP1. Je suis allé jusqu'à voir le "système" dans la barre de menu de démarrage. Mais toujours lors du changement de nom d'un fichier dans le dossier system32, il indique l'autorisation refusée. Le dossier system32 appartient désormais à TrustedInstaller, et même le compte système local ne dispose que d'autorisations spéciales.
Shaohua Li
si vous essayez de renommer ou de supprimer un fichier qui se trouve dans un répertoire Windows protégé appartenant à TrustedInstaller, votre utilisateur actuel doit posséder le fichier en modifiant l'autorisation, vous pouvez alors le renommer ou le supprimer, ceci est souvent utilisé pour supprimer slmgr. exe et d'autres fichiers système pour obtenir un accès illimité à la version trail de Windows sans payer pour cela
raven
10

Nous avons trouvé ici une réponse qui semble résoudre le problème en ajoutant / k start au paramètre binPath. Cela vous donnerait donc:

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

Cependant, Ben a dit que cela ne fonctionnait pas pour lui et quand je l'ai essayé sur Windows Server 2008, cela a créé le processus cmd.exe sous le système local, mais ce 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? Essayez-vous simplement de voir ce qui se passe lorsque vous exécutez votre service? On dirait que vous pourriez simplement utiliser la journalisation pour déterminer ce qui se passe au lieu d'avoir à exécuter l'exe en tant que système local ...

Bryant
la source
Salut Bryant. Cette solution est essentiellement exposée dans la question. Cela fonctionne-t-il vraiment pour vous? Cela entraîne un échec pour moi. Merci.
Ben Griswold
Bryant, j'ai un service qui gère l'installation et la désinstallation d'un autre composant. Je souhaite donner à notre groupe de support un moyen simple de désinstaller "de force" le composant si mon service ne parvient pas à faire son travail. Pendant le test, j'aimerais pouvoir "forcer" la désinstallation également. Merci pour l'aide ..
Ben Griswold
1
@Ben: Le type de démarrage du service "Détection des services interactifs" est-il réglé sur "Manuel" ou "Désactivé"?
Hello71
1
Pour autoriser les services interactifs pour le serveur 2012, vous HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesdevez définir sur 0 (par défaut 1)
Ivan Chau
6

Je vous recommande de définir l'ensemble d'autorisations minimum dont votre service a vraiment besoin et de l'utiliser, plutôt que le contexte du système local beaucoup trop privilégié. Par exemple, Service local .

Les services interactifs ne fonctionnent plus - ou du moins, n'affichent plus l'interface utilisateur - sur Windows Vista et Windows Server 2008 en raison de l' isolement de la session 0 .

Mike Dimmick
la source
4
Mike, merci pour la réponse. Bien que je sois d'accord avec votre recommandation et que je pense que tout le monde bénéficiera de votre réponse, je ne pense pas que vous ayez répondu à la question.
Ben Griswold
@Ben Griswold: Il fait cependant remarquer exactement ce qui fait échouer l'ancienne méthode dans Vista. +1.
SamB
1
La question est "Comment exécutez-vous CMD.exe sous le compte système local?"
Jaco Pretorius
2
@SamB, et c'est à cela que servent les commentaires, quand vous avez quelque chose à apporter qui n'est pas réellement une réponse .
Synetech
6

Utilisation de Secure Desktop pour s'exécuter en cmd.exetant quesystem

Nous pouvons facilement accéder au noyau via CMDWindows 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 en CMDtant qu'administrateur

  2. Ensuite, utilisez 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. Puis exécutez osk(sur le 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 la session de service, il fonctionnera commeNT Authority\SYSTEM

j'ai donc eu l'idée de l'exécuter sur Secure Desktop.

Démarrez n'importe quel fichier en tant qu'administrateur. Lorsque les invites UAC apparaissent, appuyez simplement sur Win+ Uet démarrez OSKet il démarrera à la CMDplace. Ensuite, dans l'invite élevée, tapez whoamiet vous obtiendrez NT Authority\System. Après cela, vous pouvez démarrer l'Explorateur à partir du shell de commande système et utiliser le profil système, mais vous êtes quelque peu limité à ce que vous pouvez faire sur le réseau via les privilèges SYSTEM pour des raisons de sécurité. J'ajouterai plus d'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 Cmd.exesous un compte système local sans utiliserPsExec. Cette méthode exécute la technique Debugger Trap qui a été découverte plus tôt, eh bien cette technique a ses propres avantages, elle peut être utilisée pour piéger certains vers rusés / malveillants ou logiciels malveillants dans le débogueur et exécuter un autre exe à la place pour arrêter la propagation ou endommager temporairement. ici, cette clé de registre piège le clavier à l'écran dans le débogueur natif de Windows et exécute cmd.exe à la place, mais cmd fonctionnera toujours avec les privilèges des utilisateurs connectés, mais si nous exécutons cmd dans session0, nous pouvons obtenir le shell système. nous ajoutons donc ici une autre idée, nous couvrons la cmd sur un bureau sécurisé, rappelez-vous que le bureau sécurisé s'exécute dans la session 0 sous le compte système et nous obtenons le shell système. Ainsi, chaque fois que vous exécutez quelque chose d'aussi élevé, vous devez répondre à l'invite UAC et aux invites UAC sur un bureau sombre et non interactif et une fois que vous le voyez, vous devez appuyer sur Win+ U, puis sélectionnerOSKvous vous CMD.exelancerez sous les privilèges du système local. Il existe encore plus de façons d'accéder au système local avecCMD

corbeau
la source
ya il y a encore plus de façons d'exécuter cmd comme Elevated avec les privilèges d'autorité NT
raven
C'est très gentil. Très agréable. Je déteste me fier à des modules complémentaires tiers pour faire quelque chose. C'est super rapide et facile. Permanent aussi :-) Le seul problème est que vous devez exécuter toutes les commandes dans la fenêtre UAC et que seules certaines applications s'ouvrent. Explorer.exe ne s'ouvre pas par exemple. Je veux expérimenter s'il existe un autre moyen de déclencher cela. Je souhaite pouvoir exécuter d'autres applications dans l'environnement Windows natif sans que l'UAC ne limite certaines applications. Super truc Raven!
KonaRin
3

Une alternative à cela est Process hacker si vous entrez dans Run as ... (Interactive ne fonctionne pas pour les personnes avec les améliorations de sécurité mais cela n'a pas d'importance) et lorsque la boîte s'ouvre, mettez Service dans le type de boîte et mettez SYSTEM dans la boîte utilisateur et mettez C : \ Users \ Windows \ system32 \ cmd.exe laissez le reste cliquez sur ok et boch vous avez une fenêtre avec cmd dessus et exécutez en tant que système maintenant faites les autres étapes pour vous-même parce que je vous suggère de les connaître

James5001
la source
2

Il y a 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 les commandes de la console et de l'interface graphique.

Alexander Haakan
la source
1

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


la source
0

J'utilise l' utilitaire RunAsTi pour exécuter en tant que TrustedInstaller (privilège élevé). L'utilitaire peut être utilisé même en mode de récupération de Windows (le mode que vous entrez en faisant Shift+ Restart), l' utilitaire psexec n'y fonctionne pas. Mais vous devez ajouter vos chemins C:\Windowset C:\Windows\System32(non X:\Windowset X:\Windows\System32) à la PATHvariable d'environnement, sinon RunAsTi ne fonctionnera pas en mode de récupération, il imprimera simplement: AdjustTokenPrivileges for SeImpersonateName: Tous les privilèges ou groupes référencés ne sont pas attribués à l'appelant .

anton_rh
la source
0

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

Pas besoin d'installer quoi que ce soit.

Paul Harris
la source