Écriture d'un exploit pour RemoteMouse 3.008
Introduction
L’application RemoteMouse est un programme permettant de contrôler à distance un ordinateur depuis un téléphone ou une tablette.
Rétro ingénierie de RemoteMouse version 3.008
Afin de faire de la rétro ingénierie sur ce programme écrit en .NET, je l’ai ouvert dans le logiciel dnSpy permettant de décompiler avec une grande justesse des binaires .NET.
Connexion au service
En recherchant les fonctions gérant le réseau dans le code décompilé, on tombe assez rapidement sur cet extrait de code:
try {
this.tl = new TcpListener(IPAddress.Parse("0.0.0.0"), 1978);
this.tl.Server.NoDelay = true;
this.tl.Start();
} catch {
MessageBox.Show("Remote Mouse's port is already in use. \r\nIt may already be running, or another program is taking up its port, or other programs are taking up its port.");
Application.Exit();
}
Cette partie du code nous indique que le service RemoteMouse.exe
écoute sur le port TCP 1978
. Nous savons maintenant où nous connecter, mais comment décoder les réponses du serveur ?
Phase de connexion
Un peu plus loin, nous trouvons le block de code qui prépare la bannière du service à envoyer sur le socket:
C’est effectivement ce que nous voyons lorsqu’on se connecte au service via netcat :
Lorsqu’on se connecte au service RemoteMouse.exe
sur le port TCP 1978
, nous recevons l’une des deux banières de service suivantes:
SIN 15win pwd pwd 300
: Indiquant que le service nécessite une authentification.SIN 15win nop nop 300
: Indiquant que le service ne nécessite pas d’authentification.
Interpréteur de commandes
Dans la boucle principale gérant la réception de donnés sur le socket, nous retrouvons ce bloc de code permettant l’interprétation des différentes commandes attendues par le service.
cin
: Envoi du mot de passe pour l’authentification.mos
: Contrôle de la souris - permet de déplacer le curseur et simuler des clics.key
: Contrôle du clavier - permet de simuler des frappes de touches.gtf
: Récupération des informations sur les fenêtres actives.abr
: Gestion de la luminosité de l’écran.adr
: Contrôle du volume audio système.mpr
: Contrôle du lecteur multimédia (lecture/pause/suivant/précédent).hb1
: Commande de heartbeat pour maintenir la connexion active.spy
: Capture d’écran à distance.cur
: Modification de l’apparence du curseur.web
: Ouverture d’URLs dans le navigateur par défaut.
Demonstration
J’ai donc implémenté un programme permettant d’exploiter le service RemoteMouse 3.008 pour taper des commandes au clavier (pour implanter un reverse shell par exemple). Voici une démonstration complète:
Vous pouvez télécharger le code source de l’exploit ici:
Limitations
Certains champs sont protégés des entrées clavier/souris controllées par un logiciel. J’ai constaté que c’était le cas sur la page de login d’une session Windows et sur la fenètre de l’User Account Control (UAC). La machine ciblée par cette attaque doit donc être déverouillée.