Ich lese Hacking: Die Kunst der Ausbeutung (2. Ausgabe) , und ich bin gerade im Abschnitt über Pufferüberläufe.
Im ersten Beispiel werden die Variablen in dieser Reihenfolge deklariert / initialisiert:
%Vor% Im Beispiel wird erklärt, dass Sie mit gdb die Adressen von auth_flag
und password_buffer
untersuchen können, und Sie werden feststellen, dass die Adresse von auth_flag
höher ist als password_buffer
. Dinge zu beachten: Ich benutze all dies in Ubuntu in Virtualbox auf einem Macbook Pro (Intel-Prozessor, 64-Bit).
Ich habe den Code des ersten Beispiels wie folgt kompiliert: gcc -g -fno-stack-protector -o auth_overflow auth_overflow.c
Wie erwartet, ist die Adresse von auth_flag
höher als password_buffer
.
Um das oben dargestellte Problem zu beheben, erklärt der Autor, dass Sie die Reihenfolge der Deklarationen wechseln sollten:
%Vor% Ich habe den Code auf die gleiche Weise kompiliert: gcc -g -fno-stack-protector -o auth_overflow2 auth_overflow2.c
Leider konnte ich nicht sehen, dass auth_flag
s Adresse niedriger ist als password_buffer
s. Tatsächlich war es noch höher. Warum ist das? Was mache ich falsch?
Der Compiler darf die gewünschte Reihenfolge wählen, um optimalen Code zu liefern, oder sogar nur zufällig, weil er einfacher zu implementieren ist. Eine Sache, die Sie versuchen könnten, ist -O0
flag, die alle Optimierungen deaktiviert.
Ich fand diesen Thread ziemlich interessant:
Quote: In der Theorie kann es gemacht werden
%Vor%Apple hat eine Sicherheitsfunktion, um nur die Art von Hacking zu verhindern, über die Sie sprechen - Es gibt einen Grad der Randomisierung, bei dem alles im Speicher gespeichert wird, so dass Sie beispielsweise den für ein bestimmtes Programm zugewiesenen Speicher nicht finden können. und gehen Sie zum 1502. Byte, wo die Funktion zum Öffnen der Hochsicherheitsverriegelungsverriegelung sitzt, weil sie nicht immer an der gleichen Stelle im Speicher ist.
Siehe Ссылка für Einzelheiten dazu.
Lustiger Zufall, dass Sie dem begegnen würden, und dass Matt Joiner auf die Antwort stolpern würde, während er versucht, Apple zu verbrennen.