Basiswissen Buffer Overflow

14.05.2004
Von Thomas Wölfer

Im Beispiel liegt der Speicher für die lokale Variable im Bereich zwischen den Adressen 11 und 20. Es gibt also 10 Bytes Platz für die lokale Variable.

Buffer-Overflow: So passierts

An dieser Stelle ist es notwendig, einen geistigen Klimmzug zu veranstalten, denn die bisher dargestellten Graphiken sind nur in der Theorie korrekt. In der Praxis sieht die Sache ein klein wenig anders aus. Tatsächlich ist es nämlich so, dass die Adressen des Stacks von oben nach unten verlaufen. Neue Elemente, die auf den Stack gelegt werden, haben also kleinere Adressen als die zuvor auf den Stack gelegten. Dieses Faktum ist der ganze Knackpunkt, der Buffer Overflows so gefährlich macht.

Einmal angenommen, der Stack hat eine Gesamtgröße von 30 Bytes. Die Daten werden dann in der eingehenden Reihenfolge nach unten hin in diesen Speicherbereich geschrieben. Das Bild, das sich dadurch aus dem vorhergehenden Beispiel ergibt, ist ein völlig anderes, denn das Speicherlayout sieht dann wie folgt aus:

Wichtig: In der Praxsi wächst der Stack nicht nach rechts sondern nach links.