Aller au contenu

RDP Hijacking

Avertissement

Cette documentation est destinée à un usage éducatif, et non à des fins mailveillantes.

Le RDP hijacking (Remote Desktop Protocol hijacking) permet de prendre le contrôle d'une session de bureau à distance (RDP) mal déconnectée.

Le principal avantage est de ne pas avoir à saisir les identifiants de l'utilisateur cible pour se connecter. Cette technique peut être exploitée dans des environnements RDS (Remote Desktop Services) ou sur des serveurs disposant du service Bureau à distance activé.

Prérequis

  • Vous devez être administrateur local de la machine (SRV-RDS\Administrateur par exemple) ;
  • Vous devez être connecté en console (clavier/écran direct sur la machine, ou bien depuis la console de votre hyperviseur si c’est une machine virtuelle).

1 - Télécharger PsExec

Connectez vous sur le serveur cible en tant qu'administrateur local, puis téléchargez PsTools sur le site de Microsoft.

Extrayez le fichier PsTools.zip.

2 - Je suis le système

À l'aide d'un invite de commande cmd.exe, placez-vous dans le répertoire où se trouve le fichier PsExec64.exe, puis démarrez un invite de commandes en tant que Système :

PsExec64.exe -s -i cmd

Dans ce cas, -s signifie "en tant que système" et -i permet d'afficher cmd en mode interactif, c'est-à-dire qu'une fenêtre s'affichera sur notre écran.

3 - Repérage

Listez toutes les sessions actuelles sur la machine cible à l'aide de query user :

query user

 UTILISATEUR                      SESSION          ID          ÉTAT         TEMPS INACT         TEMPS SESSION
 >administrateur                  console          1          Actif         3:57                10/01/2025 12:36
  demo                            rdp-tcp#5        4          Actif         3:57                10/01/2025 12:36

Identifiez les sessions, on observe ici que la session n°1 est la nôtre, est celle de notre utilisateur cible demo est la n°4.

4 - Lancement de l'attaque

Afin d'usurper la session RDP de l'utilisateur, il va falloir créer un service.
Une fois ce service démarré, il remplacera votre session par celle de l'utilisateur cible.

4.1 - Créer le service

Dans le même invite de commandes Système, on crée un service appelé usurpationUtilisateur (le choix du nom est libre du moment qu'il n'interfère pas avec des services Windows ou tiers) :

sc create <Nom> binpath="cmd.exe /k <Commande> /dest:<Destination>"

Options de la commande :

Argument Description
Nom Nom du service (dans notre cas, on le nomme usurpationUtilisateur)
Commande Quelle commande le service doit-il exécuter ? Dans notre cas, on souhaite ouvrir la session n°4, donc tscon 4
Destination Quelle session souhaitez-vous remplacer ? Dans notre cas, nous sommes connecté directement sur le serveur (comme un PC standard avec écran clavier souris), donc on saisit console. Si vous êtes connecté via RDP, vous pouvez saisir la valeur vous correspondant dans la colonne SESSION de la commande query user (ex: rdp-tcp#59)

Exemple

Dans notre cas, la commande ressemblerait à ça :

sc create usurp binpath="cmd.exe /k tscon 4 /dest:console"

4.2 - Démarrer le service

Maintenant, vous allez pouvoir contrôler la session RDP de l'utilisateur cible en démarrant simplement le service usurpationUtilisateur créé précédemment :

sc start usurp

Bien joué !

Vous êtes désormais connecté sur la session de l’utilisateur cible.

4.3 - Supprimer le service

Il est préférable de supprimer le service après avoir terminé le contrôle de la session :

sc delete usurpationUtilisateur

Attention à la gaffe...

Attention, l'exécution d'un PsExec est visible dans l'Observateur d'événements !