Stack Buffer Overflows
Verstehen Sie das Stack-Layout und das Überschreiben von EIP/RIP und schreiben Sie einen funktionierenden Exploit für ein verwundbares C-Programm.
Stack Buffer Overflows ist eine kostenlose Cyber Security 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 Cyber Security Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein Buffer Overflow?
Ein Pufferüberlauf tritt auf, wenn mehr Daten in einen Puffer geschrieben werden, als dieser aufnehmen kann. Die überschüssigen Daten überschreiben angrenzende Speicherbereiche und können dadurch Steuerungsstrukturen beschädigen und die Programmausführung umleiten.
Speicheraufbau des Stacks
Der Call Stack enthält: lokale Variablen (Puffer), den gespeicherten Frame-Pointer (SFP) und die Rücksprungadresse (RIP/EIP) – die Adresse, an der die Ausführung nach der Rückkehr aus der Funktion fortgesetzt wird. Ein Überlauf eines lokalen Puffers kann die Rücksprungadresse überschreiben.
Klassisches Stack-Smashing
Wenn ein Programm gets() oder strcpy() ohne Längenprüfung aufruft, kann ein Angreifer genügend Bytes eingeben, um den Puffer zu füllen und die Rücksprungadresse mit der Adresse von Shellcode oder eines nützlichen Gadgets zu überschreiben.
// Vulnerable C code:
void vuln() {
char buf[64];
gets(buf); // No bounds checking!
}Den Offset ermitteln
Bestimmen Sie mithilfe der Mustererzeugung, wie viele Bytes bis zur Rücksprungadresse gelangen:
# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"Schutzmechanismen: Stack Canaries
Ein Stack Canary ist ein zufälliger Wert, der zwischen den lokalen Variablen und der gespeicherten Rücksprungadresse platziert wird. Vor der Rückkehr wird der Canary überprüft – wurde er überschrieben, beendet sich das Programm. Für die klassische Ausnutzung eines Pufferüberlaufs muss dieser Schutz umgangen werden.
Schutzmaßnahmen: ASLR
Address Space Layout Randomization (ASLR) randomisiert bei jeder Ausführung die Basisadresse von Stack, Heap und Bibliotheken. Ohne ein Leck einer aktuellen Adresse ist es auf 64-Bit-Systemen praktisch unmöglich, die Sprungadresse zu erraten.
Schutzmaßnahmen: NX/DEP
NX (No-Execute) / DEP (Data Execution Prevention) markiert den Stack als nicht ausführbar. In den Buffer eingeschleuster Shellcode kann nicht direkt ausgeführt werden. Dadurch sind Angreifer gezwungen, Return-Oriented Programming (ROP) zu verwenden.
Adressen auslesen
Um ASLR zu umgehen, benötigen Angreifer ein Informationsleck: Format-String-Schwachstellen, Heap-Überlesevorgänge (wie bei Heartbleed) oder einen lesbaren Zeiger in der ausgenutzten Funktion. Eine einzige geleakte Adresse verrät den Offset und ermöglicht die Berechnung weiterer Adressen.
Einen einfachen Exploit schreiben
Ein einfacher 32-Bit-Stack-Overflow ohne Schutzmaßnahmen:
# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()Die ret2libc-Technik
ret2libc umgeht NX, indem der Rücksprung in libc-Funktionen (wie system()) erfolgt, anstatt Shellcode auszuführen. Der Angreifer überschreibt die Rücksprungadresse mit der Adresse von system und übergibt "/bin/sh" als Argument.
Werkzeuge für die Exploit-Entwicklung
Wichtige Werkzeuge:
- pwntools — Python-Bibliothek für Exploits
- GDB + pwndbg/peda — Debugger mit Exploit-Hilfsfunktionen
- checksec — zeigt die Schutzmaßnahmen eines Binaries
- ROPgadget / ropper — findet ROP-Ketten
checksec --file=./vulnSchnelltest: Stack-Overflow
Welche Schutzmaßnahme platziert einen zufälligen Wert zwischen lokalen Variablen und der gespeicherten Rücksprungadresse und beendet das Programm, wenn dieser überschrieben wird?
Zusammenfassung der Lektion
Stack-Buffer-Overflows überschreiben die Rücksprungadresse, indem ein Buffer über seine Grenzen hinaus gefüllt wird. Zu den Schutzmaßnahmen gehören Stack-Canaries (erkennen Überschreibungen), ASLR (randomisiert Adressen) und NX/DEP (nicht ausführbarer Stack). ret2libc umgeht NX. Informationslecks setzen ASLR außer Kraft. pwntools vereinfacht die Exploit-Entwicklung.
Häufig gestellte Fragen
Ist die Lektion „Stack Buffer Overflows“ kostenlos?
Ja — der vollständige Text von „Stack Buffer Overflows“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cyber Security Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Stack Buffer Overflows“?
Verstehen Sie das Stack-Layout und das Überschreiben von EIP/RIP und schreiben Sie einen funktionierenden Exploit für ein verwundbares C-Programm. Du übst Cyber Security 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 Cyber Security Academy zu starten?
Keine Vorkenntnisse erforderlich. Cyber Security 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 „Stack Buffer Overflows“?
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 Cyber Security Academy-Lektion Code schreiben und ausführen?
Ja. Jede Cyber Security 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
- Stack Buffer Overflows
- Return-Oriented Programming (ROP)
- Format-String-Schwachstellen
- Heap-Exploitation: Use-After-Free und Heap-Spraying