0Pricing
Ethical Hacking Academy · Lektion

Speicher und Stack

Wie Overflows funktionieren

Speicher und Stack ist eine kostenlose Ethical Hacking Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ethical Hacking Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ethical Hacking Academy-Kurs umfasst insgesamt 4 Lektionen.

Speicheraufbau eines Prozesses

Wenn ein Programm ausgeführt wird, weist das Betriebssystem ihm einen Speicheraufbau mit verschiedenen Bereichen zu: text (Code), data/BSS (globale Variablen), der Heap (dynamische Speicherzuweisung) und der Stack.

Buffer Overflows nutzen meistens den Stack aus. Daher ist es wichtig, ihn zu verstehen.

Was ist der Stack?

Der Stack ist ein Speicherbereich, der für Funktionsaufrufe verwendet wird. Er speichert lokale Variablen, Funktionsargumente und Rücksprungadressen.

Auf x86 wächst er abwärts: Beim Ablegen von Daten bewegt sich der Stack Pointer zu niedrigeren Adressen. Diese Richtung ist wichtig, wenn ein Overflow auftritt.

Stack Frames

Jeder Funktionsaufruf erzeugt ein Stack Frame. Ein Frame enthält typischerweise lokale Variablen, den gesicherten Base Pointer (EBP) und die Rücksprungadresse (gesichertes EIP).

Die Rücksprungadresse teilt der CPU mit, wo sie nach Abschluss der Funktion fortfahren soll. Ihre Kontrolle bildet den Kern der Ausnutzung von Stack Overflows.

Wichtige Register

Bei 32-Bit-x86 sind folgende Register wichtig:

  • ESP: Stack Pointer, die Spitze des Stacks.
  • EBP: Base Pointer, die Verankerung des aktuellen Frames.
  • EIP: Instruction Pointer, die Adresse der nächsten Anweisung.

Wenn Sie EIP kontrollieren, kontrollieren Sie den Ausführungsfluss.

Was ist ein Buffer?

Ein Buffer ist ein Speicherblock fester Größe, beispielsweise ein lokales Zeichenarray. Das Programm erwartet, dass die Daten hineinpassen.

Wenn das Programm mehr Daten kopiert, als der Buffer aufnehmen kann, ohne die Länge zu prüfen, läuft der Überschuss in angrenzende Speicherbereiche über.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

Der Überlauf

Ein Pufferüberlauf tritt auf, wenn die Eingabe die Größe des Puffers überschreitet und benachbarte Daten auf dem Stack überschreibt.

Da das gespeicherte EBP und die Rücksprungadresse direkt hinter lokalen Puffern liegen, kann eine ausreichend große Eingabe die Rücksprungadresse überschreiben und dadurch den Kontrollfluss übernehmen.

Gefährliche Funktionen

Überläufe entstehen meist durch unsichere C-Funktionen, die die Länge nicht überprüfen:

  • strcpy, strcat, sprintf, gets.

Sicherere Alternativen wie strncpy oder snprintf akzeptieren eine Größenbegrenzung, aber älterer Code ist voll von den gefährlichen Varianten.

gets(buffer); // never use: no length limit at all

Was das Überschreiben von EIP ermöglicht

Wenn die verwundbare Funktion zurückkehrt, lädt die CPU die nun vom Angreifer kontrollierte Rücksprungadresse in EIP und springt dorthin.

Wenn Sie EIP auf Ihren eigenen eingeschleusten Maschinencode (Shellcode) zeigen lassen, führt die CPU ihn mit den Berechtigungen des Programms aus.

Little-Endian-Adressierung

x86 verwendet Little-Endian: Mehrbytewerte werden mit dem niederwertigsten Byte zuerst gespeichert. Um die Rücksprungadresse mit 0x080414C3 zu überschreiben, schreiben Sie die Bytes in umgekehrter Reihenfolge.

Eine falsche Byte-Reihenfolge ist ein häufiger Anfängerfehler und führt dazu, dass Exploits scheinbar ohne Fehlermeldung fehlschlagen.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Moderne Schutzmechanismen

Moderne Systeme verfügen über zusätzliche Schutzmechanismen, die das Ausnutzen erschweren:

  • DEP/NX: markiert den Stack als nicht ausführbar.
  • ASLR: randomisiert Speicheradressen.
  • Stack Canaries: erkennen Überschreibungen vor der Rückkehr.

Dieser Kurs konzentriert sich auf den klassischen Fall (deaktivierte Schutzmechanismen), um die Grundlagen zu vermitteln.

Warum das weiterhin wichtig ist

Obwohl moderne Schutzmechanismen klassische Stacküberläufe erschweren, bleiben die Grundlagen unverzichtbar. Eingebettete Systeme, IoT-Geräte und ältere Software verfügen häufig überhaupt nicht über diese Schutzmechanismen.

Die Beherrschung des Grundfalls ist außerdem eine Voraussetzung für fortgeschrittene Techniken wie ROP, mit denen sich moderne Abwehrmaßnahmen umgehen lassen.

Kurze Überprüfung

Rufen Sie sich in Erinnerung, welchen Wert der Angreifer letztlich kontrollieren möchte.

Zusammenfassung

Sie verstehen nun die Grundlagen:

  • Der Stack speichert lokale Variablen, das gespeicherte EBP und die Rücksprungadresse und wächst nach unten.
  • ESP, EBP, EIP sind die zentralen x86-Register; wer EIP kontrolliert, kontrolliert die Ausführung.
  • Unsichere Funktionen wie strcpy und gets verursachen Überläufe.
  • x86 verwendet Little-Endian; moderne Schutzmechanismen sind DEP, ASLR und Canaries.

Als Nächstes fuzzing Sie ein Programm, um den Absturz-Offset zu finden.

Häufig gestellte Fragen

Ist die Lektion „Speicher und Stack“ kostenlos?

Ja — der vollständige Text von „Speicher und Stack“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ethical Hacking Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ethical Hacking Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Speicher und Stack“?

Wie Overflows funktionieren Du übst Ethical Hacking Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ethical Hacking Academy zu starten?

Keine Vorkenntnisse erforderlich. Ethical Hacking Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Speicher und Stack“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ethical Hacking Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ethical Hacking Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Speicher und Stack
  2. Fuzzing zur Absturzsuche
  3. EIP kontrollieren
  4. Shellcode und Exploitation
← Zurück zu Ethical Hacking Academy