Exploitation des RPC (RPC Cycling)

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


RPC (pour Remote Procedure Call) est un protocole réseau utilisé afin de faire appel à des procédures stockées sur un ordinateur distant. L’exemple le plus simple que j’ai en tête pour vous montrer comment peut être utiliser RPC, c’est celui du cassage de mot de passe.

Imaginez que l’on dispose d’un serveur ayant 256Go de RAM et 16 cartes graphiques. Ce serveur est parfait pour faire du cassage de mot de passe puisqu’il dispose de grosses ressources. Ce que l’on pourrait faire c’est y implémenter une procédure que l’on appellerait « crack » et qui prend trois paramètres : le nom de la procédure à utiliser, un hash et le format du hash.

Cette procédure renvoie en résultat une string : le mot de passe s’il a été cracké ou la string « Null » si le mot de passe n’a pas été cracké.

Pour casser un hash il faudra donc que notre ordinateur envoie ces trois paramètres via RPC :

Capture d’écran du 2019-05-14 13-47-26.png

Voilà globalement je ne pense pas qu’il y ait besoin de plus en savoir sur le côté théorique. Jusqu’à présent je n’ai jamais eu à implémenter ce protocole donc je ne pourrais pas vous en dire plus.

En revanche récemment, dans le cadre d’un CTF j’ai eu besoin de récupérer le SID d’un domaine auquel je n’avais pas accès ce qui m’a amené à travailler sur l’attaque dites du RPC Cycling.

L’attaque a déjà été décrite par David Kennedy dans l’article « New Tool Release – RPC_ENUM – RID Cycling Attack« . Je ne me contenterai comme d’habitude que d’en faire une brève retranscription en français.

Globalement cela consiste juste à se connecter au share IPC$ via le client rpcclient. Ce share est un peu particulier puisqu’il ne nous permettra pas d’écrire/lire de données présentes sur la machine distante mais il nous permettra d’accéder à quelques fonctions qui nous permettront d’énumérer le nom du domaine, son SID et potentiellement les utilisateurs du domaine.

Pour se connecter via une session nulle on pourra utiliser cette commande :

rpcclient -U "" -N IP

Capture d’écran du 2019-05-14 14-38-12.png

Une fois connecté on pourra récupérer le nom du domaine ainsi que son SID en utilisant la commande suivante :

lsaquery

capture-de28099c3a9cran-du-2019-05-14-14-38-40.png

Pour ce qui est de l’énumération d’utilisateurs il faudra utiliser un second script écrit par randomwalksp : UserEnum_RPC.py !

Ce script prend en paramètre l’adresse IP du DC ainsi qu’une liste d’utilisateur à bruteforcer :

Capture d’écran du 2019-05-14 14-58-48.png

On y apprend que les utilisateurs « Administrateur » et « victime » existent ce qui nous permettra potentiellement de faire du bruteforce d’authentification plus tard.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s