Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Exploit-Entwicklung für COMP3703: Stack- und Heap-basierte Angriffe meistern

Lerne die Grundlagen der Stack- und Heap-basierten Exploit-Entwicklung am Beispiel von COMP3703 Assignment 2. Von Buffer Overflows bis Use-After-Free – dieser Leitfaden hilft dir, die Konzepte zu verstehen und eigene Exploits zu schreiben.

COMP3703 Exploit Entwicklung Stack Overflow Heap Exploitation Use-After-Free Double-Free Buffer Overflow pwntools Python Intel HEX Parser Arbitrary Code Execution ASLR umgehen NX Bypass Cybersecurity Studium Sicherheitslücken ausnutzen Exploit Primitive CTF Vorbereitung

Einführung in die Exploit-Entwicklung für COMP3703

Die Sicherheitsforschung ist ein zentraler Bestandteil der modernen Informatik. Im Rahmen des COMP3703 Assignments 2 beschäftigst du dich mit Stack-basierten und Heap-basierten Exploits. Diese Techniken sind nicht nur für die akademische Welt relevant, sondern auch für reale Sicherheitslücken in Software, die täglich millionenfach genutzt wird. Ob in Spielen, Apps oder Finanzsystemen – das Verständnis von Speicherfehlern hilft, Angriffe zu verstehen und Abwehrmechanismen zu entwickeln.

In diesem Tutorial lernst du die grundlegenden Konzepte, die du für die Lösung der Aufgaben benötigst: von der Stack-basierten Exploitation (Problem 1) bis zur Heap-basierten Exploitation (Problem 2). Wir behandeln typische Schwachstellen wie Buffer Overflows, Use-After-Free und Double-Free und zeigen dir, wie du mit Python und pwntools eigene Exploits schreibst.

Stack-basierte Exploitation: Die Grundlagen

Der Stack ist ein Speicherbereich, der für Funktionsaufrufe und lokale Variablen genutzt wird. Ein Stack Buffer Overflow tritt auf, wenn mehr Daten in einen Puffer geschrieben werden, als Platz ist. Dadurch können benachbarte Daten wie die Rücksprungadresse überschrieben werden. Dies ermöglicht es, den Programmablauf zu manipulieren.

Intel HEX Format und Parser-Schwachstellen

Im Assignment wird ein Binärprogramm verwendet, das das Intel HEX Format parst. Solche Parser sind anfällig für Buffer Overflows, da sie oft keine Längenprüfung durchführen. Ein Angreifer kann speziell präparierte HEX-Daten senden, um den Stack zu überschreiben und Code auszuführen.

Beispiel: Stell dir vor, du spielst ein Online-Spiel und ein Gegner schickt einen manipulierten Spielstand. Wenn der Client diesen nicht richtig prüft, könnte der Gegner deinen Computer übernehmen. So ähnlich funktioniert ein Stack-Exploit.

Exploit-Primitives aufbauen

Die Teilaufgaben in Problem 1 sind so gestaltet, dass du schrittweise Exploit-Primitives entwickelst. Zunächst lernst du, den Instruction Pointer (IP) zu kontrollieren, dann den Stack zu manipulieren und schließlich beliebigen Code auszuführen. Dabei arbeitest du mit pwntools, einer Python-Bibliothek für Exploit-Entwicklung.

from pwn import *

# Beispiel: Verbindung zu einem lokalen Dienst
p = remote('localhost', 1337)
p.sendline(b'A' * 100)
p.interactive()

Wichtig: In der finalen Abgabe musst du remote() verwenden, da die Binärdateien auf einem entfernten Server laufen. Während der Entwicklung darfst du process() nutzen, um mit gdb zu debuggen.

Heap-basierte Exploitation: Use-After-Free und Double-Free

Der Heap wird für dynamische Speicheranforderungen verwendet. Anders als der Stack ist der Heap nicht linear organisiert. Hier lauern andere Gefahren: Use-After-Free (UAF) und Double-Free.

Use-After-Free verstehen

Ein Use-After-Free tritt auf, wenn ein Programm auf Speicher zugreift, der bereits freigegeben wurde. Dies kann zu Codeausführung führen, wenn der Angreifer den freigegebenen Speicher mit eigenen Daten belegt. Stell dir vor, du löschst eine Nachricht in einer Messaging-App, aber die App zeigt sie trotzdem an – und der Inhalt wurde von einem Angreifer ausgetauscht.

Double-Free ausnutzen

Ein Double-Free liegt vor, wenn derselbe Speicherblock zweimal freigegeben wird. Dies kann den Heap-Allokator durcheinanderbringen und zu Arbitrary Write führen. Moderne Heap-Implementierungen wie ptmalloc haben Schutzmechanismen, aber mit genug Geschick lassen sich diese umgehen.

Heap-Exploits in der Praxis

Im Assignment gibt es zwei Binärdateien mit ähnlicher Funktionalität, aber unterschiedlichen Exploit-Mitigationen. Du musst die Schwachstellen identifizieren und Exploits schreiben, die die Schutzmaßnahmen umgehen. Dazu gehören ASLR, NX und Stack Canaries.

Ein aktuelles Beispiel: Im Jahr 2026 nutzen viele KI-Chatbots dynamische Speicherverwaltung. Ein Fehler im Heap-Management könnte es einem Angreifer erlauben, den Bot zu kapern und schädliche Antworten zu generieren.

Artefakt und Bericht erstellen

Deine Abgabe besteht aus zwei Teilen: dem Artefakt (Python-Skripte) und dem Bericht (PDF). Der Bericht sollte deine Vorgehensweise erklären, etwa 3500 Wörter umfassen und nach der Konvention u1234567_report.pdf benannt sein.

Python-Skripte schreiben

Jedes Teilproblem erfordert ein eigenes Skript. Verwende pwntools und stelle sicher, dass die Skripte nur über das Netzwerk kommunizieren. Teste sie mit den bereitgestellten Server-Skripten.

# Beispiel: Exploit für Stack Buffer Overflow
from pwn import *

p = remote('target', 1337)
p.recvuntil(b'>')
p.sendline(b'A' * 64 + p32(0xdeadbeef))
p.interactive()

Bericht verfassen

Im Bericht erklärst du die Schwachstellen, deine Exploit-Strategie und die Ergebnisse. Verwende Diagramme, um den Speicherfluss zu veranschaulichen. Vergiss nicht, auf Trends wie Cybersecurity in der Gaming-Industrie oder KI-Sicherheit einzugehen, um deine Arbeit kontextuell einzuordnen.

Häufige Fehler und Tipps

  • Fehler 1: Lokale Adressen in remote() verwenden. Denk daran, dass du die Adressen aus dem Binär extrahieren musst.
  • Fehler 2: Schutzmechanismen ignorieren. Prüfe immer, ob ASLR, NX oder Stack Canaries aktiviert sind.
  • Tipp: Nutze checksec aus pwntools, um die Sicherheitsmerkmale einer Binärdatei zu analysieren.
  • Tipp: Entwickle deine Exploits schrittweise. Beginne mit einfachen Buffer Overflows und steigere die Komplexität.

Fazit

Die Exploit-Entwicklung ist eine faszinierende Disziplin, die tiefe Einblicke in die Funktionsweise von Betriebssystemen und Compilern bietet. Mit den hier vorgestellten Techniken bist du gut gerüstet, um die Aufgaben des COMP3703 Assignments 2 zu lösen. Denk daran: Übung macht den Meister. Experimentiere mit den Binärdateien, lies die bereitgestellten Hinweise und tausche dich mit Kommilitonen aus. Viel Erfolg!