
Exploitation binaire et rétro-ingénierie (de l'assembleur vers le C)
Explorez le désassemblage, l’exploitation binaire et le rétro-ingénierie à travers 10 petits défis.
Dans le dossier de chaque niveau, vous trouverez :
flag - mot de passe pour le niveau suivant
README.md - comment trouver le mot de passe
source.c - le binaire rétro-ingéniéré
dissasembly_notes.md - notes sur l’assembleur
Consultez le sujet pour plus de détails.
Pour plus de fun avec gdb et l’exploitation, voir le projet précédent RainFall.
Téléchargez d’abord OverRide.iso depuis 42 OverRide.iso.
Sous Mac OSX, installez VirtualBox.
Dans VirtualBox, créez une nouvelle VM (cliquez sur Nouveau).
Poursuivez toutes les étapes suivantes avec les paramètres par défaut :
Ensuite, cliquez sur Configuration > Réseau > Adaptateur 1 > Attaché à : Pont réseau.
Toujours dans Configuration, cliquez sur Stockage > À droite de "Contrôleur : IDE", il y a une icône de CD avec un signe + (ajouter un lecteur optique). Cliquez sur Ajouter une image disque et sélectionnez OverRide.iso.
Cliquez sur Démarrer pour lancer la VM. Une fois en fonctionnement, elle devrait afficher l’adresse IP de la VM et demander à l’utilisateur de se connecter.
Connectez-vous depuis un shell séparé en tant qu’utilisateur level00 avec le mot de passe level00.
ssh level00@{VM_IP} -p 4242
En tant qu’utilisateur level00, le but est de lire le mot de passe de l’utilisateur level01, situé dans /home/users/level01/.pass. Cependant, l’utilisateur level00 n’a pas les permissions pour lire ce fichier.
Dans le dossier personnel de l’utilisateur level00, se trouve un binaire level00 avec le bit SUID activé et propriétaire level01.
Cela signifie que lorsque nous exécutons le binaire level00, nous le faisons avec les permissions de l’utilisateur level01.
Nous devons trouver une vulnérabilité dans le binaire level00 avec gdb. Puis exploiter la vulnérabilité pour exécuter system("/bin/sh"), ouvrant un shell en tant qu’utilisateur level01 où nous avons les permissions de lire le mot de passe.
cat /home/users/level01/.pass
Connectez-vous ensuite en tant qu’utilisateur level01.
su level01
Répétez pour chaque niveau.
Pour chaque niveau, nous avons rétro-ingéniéré le source.c original en examinant le désassemblage gdb du binaire.
0 - Mot de passe codé en dur
1 - Attaque Ret2Libc
2 - Attaque par chaîne de format printf()
3 - Mot de passe par force brute
4 - Débordement de pile gets() + Attaque Return-to-libc
5 - Shellcode dans variable d’environnement + attaque par chaîne de format printf()
6 - Valeur de hachage découvrable avec gdb
7 - Attaque Ret2Libc sur table de données non protégée
8 - Sauvegarde du mot de passe via lien symbolique
9 - Erreur de décalage d’un
J’ai écrit ce projet en équipe avec la super talentueuse @dfinnis.