Pufferüberlauf Beispiel aus Art of Exploitation Buch

8

Ich habe dieses Buch Art of Exploitation gelesen, das ist ein gutes Buch, und ich stoße auf dieses Beispiel aus der Datei exploit_notesearch.c.

Kurzer Autor versucht, Programm aus notesearch.c zu überlaufen.

%Vor%

Das Argument der Hauptfunktion wird in das Suchstringarray kopiert und wenn das Argument größer als 100 Bytes ist, wird die Rücksprungadresse von der Hauptfunktion überlaufen.

Der Autor bereitet den Shellcode in exploit_notesearch.c vor und ruft anfälliges notesearch.c

auf %Vor%

Sie können sehen, dass der Shellcode mit dem NOP-Schlitten und der Rücksprungadresse kombiniert ist, die auf diesen NOP-Schlitten zeigen sollen. Der Autor verwendet die Adresse einer lokalen Variablen i als Bezugspunkt und subtrahiert 270 Bytes, um die ungefähre Position des NOP-Schlittens herauszufinden.

Nach meinem Verständnis geht der Autor davon aus, dass der Stackframe der Hauptfunktion von vulnerable notesearch.c im selben Stacksegment wie der Stackframe der Hauptfunktion von exploit_notesearch.c liegen wird. Ich nehme das an, weil nur so diese Manipulation mit der Adresse der lokalen Variablen ich arbeiten kann.

Aber der Autor ruft angreifbares notesearch.c mit Hilfe des Systems () wie dieses System (Kommando) auf. Mein Punkt ist, dass diese Funktion system () irgendwo innerhalb verwendet fork (), um Child-Prozess zu spawnen und danach exec () -Funktion verwendet, um Bild des Prozesses zu ändern. Aber wenn das Bild geändert wird, bedeutet dies, dass das Stapelsegment frisch ist und all diese Manipulationen mit der Adresse der lokalen Variablen i in der Hauptfunktion in exploit_notesearch.c nutzlos sein werden, aber irgendwie funktioniert dieser Exploit, was für mich völlig verwirrend ist.

>     
Rustam Issabekov 02.01.2012, 00:25
quelle

1 Antwort

11

Der Autor geht einfach davon aus, dass der C-Compiler die Stapel dieser beiden Programme an den gleichen (oder sehr ähnlichen) virtuellen Adressen und platzieren wird, die das Betriebssystem nicht ausführen wird Adressrandomisierung (ASLR) . Dies bedeutet, dass die Stack-Frames der beiden Hauptfunktionen ungefähr am selben Ort liegen, was diesen Exploit ermöglicht.

Dies ist keine sehr robuste Art der Ausnutzung, wie Sie sich vorstellen können (es wird wahrscheinlich auf den meisten modernen 64-Bit-Systemen fehlschlagen). Robustere Exploits könnten eine Form der renditeorientierten Programmierung verwenden oder versuchen, den vorhandenen char *argv -Zeiger auf das zu verwenden relevanter Stapelrahmen.

    
Niklas B. 02.01.2012, 00:43
quelle