dimanche 21 octobre 2007

Comment avoir un shell SYSTEM ... sous Vista

Il y a des moments avec Windows où le compte Administrateur ne suffit pas : il est nécessaire de "passer SYSTEM".

Heureusement il a toujours existé une méthode simple pour cela :

C:\> AT 12:00 /INTERACTIVE cmd.exe

Le service de planification de tâches étant un service interactif exécuté sous le compte SYSTEM, le shell qui apparait à 12h00 sur la machine est lui-même SYSTEM. Un comportement pas forcément envisagé par Microsoft à l'origine, mais simple à utiliser sur le terrain.

Avec Vista, les choses se compliquent un peu ...

C:\> at 12:00 /interactive cmd.exe Warning: Due to security enhancements, this task will run at the time expected but not interactively. Use schtasks.exe utility if interactive task is required ('schtasks /?' for details). Added a new job with job ID = 1

Effectivement le CMD est lancé ... dans la session 0. Et même si le service UI0Detect est démarré, rien ne se passe sur la console de l'utilisateur (session 1).


Essayons donc la méthode officielle. Je vous épargne la lecture de SCHTASKS /?, pour résumer il faut lancer :

C:\> schtasks /create /ru "VISTA64\Admin" /tn "cmd" /tr "cmd.exe" /sc once /st 12:00 /it
Opération réussie : la tâche planifiée "cmd" a été créée.


Effectivement, un shell interactif exécuté sous le compte "VISTA64\Admin" apparait bien à l'heure dite. Il est en fait lancé par TASKENG, prenant en paramètre le GUID de tâche, d'où le titre de la fenêtre.


Essayons maintenant le shell SYSTEM :

C:\> schtasks /create /ru "NT AUTHORITY\SYSTEM" /tn "cmd" /tr "cmd.exe" /sc once /st 12:00 /it Opération réussie : la tâche planifiée "cmd" a été créée.

Perdu ! Le shell apparait dans la session 0, et rien ne se passe sur le bureau de l'utilisateur.

En conclusion, il ne reste que 2 solutions :

1/ Lire cet excellent article sur la création de processus dans Vista, et tout coder soi-même (sans utiliser Visual Studio 6, n'en déplaise à Maître Devine ;) :
http://www.codeproject.com/useritems/UAC__The_Definitive_Guide.asp?msg=2281657

- ou -

2/ Utiliser l'outil PsExec de SysInternals :
C:\> psexec -s -i cmd.exe

Sur ce (et sans transition), je vous donne rendez-vous sur :

Aucun commentaire: