Écriture d'un exploit pour RemoteMouse 3.008

Table des matières :

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.

  • key : Contrôle du clavier.

  • gtf : To be defined.

  • abr : To be defined.

  • adr : To be defined.

  • mpr : To be defined.

  • hb1 : To be defined.

  • spy : To be defined.

  • cur : To be defined.

  • web : To be defined.

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:

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.

References