0Pricing
Cyber Security Academy · Lektion

Format-String-Schwachstellen

Nutzen Sie printf-Formatstrings aus, um beliebigen Speicher zu lesen und an beliebige Adressen zu schreiben.

Format-String-Schwachstellen ist eine kostenlose Cyber Security Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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 eine Format-String-Schwachstelle?

Eine Format-String-Schwachstelle entsteht, wenn Benutzereingaben direkt als Format-String-Argument an printf() oder ähnliche Funktionen übergeben werden. Der Angreifer kann Speicher lesen, Stack-Adressen ausleiten und beliebige Werte schreiben.

Das verwundbare Muster

Verwundbar im Vergleich zu sicher:

// VULNERABLE - user controls the format string:
printf(user_input);
fprintf(stderr, user_input);

// SAFE - user input is a data argument:
printf("%s", user_input);

Speicher mit %x und %p lesen

Formatspezifizierer ohne zugehörige Argumente lesen Werte vom Stack:

# Input: %p.%p.%p.%p.%p
# Output: 0x7ffd12345678.0x400580.0x0.0x1.0x7f3a...
# Each %p prints the next value off the stack - leaking addresses!

ASLR mit Format-String-Leaks umgehen

Auf dem Stack befinden sich häufig Zeiger auf libc, den Stack und das Binary. Indem ein Angreifer diese mit den Spezifizierern %p oder %lx ausliest, kann er Basisadressen berechnen und ASLR außer Kraft setzen — sogar ohne eine andere Schwachstelle.

Beliebigen Speicher mit %s lesen

%s interpretiert den Stack-Wert als Zeiger und gibt den String an dieser Adresse aus. Indem die Zieladresse an der richtigen Stack-Position platziert und der Parameterzugriff (%7$s) verwendet wird, kann ein Angreifer beliebige Speicherbereiche lesen.

# Direct parameter access:
printf("%7$s")  # prints string at 7th stack parameter
# If 7th param is an address you control, reads that memory

Speicher mit %n schreiben

%n schreibt die Anzahl der bisher ausgegebenen Zeichen an die Adresse, auf die das entsprechende Argument zeigt. Dadurch lassen sich kontrollierte Werte an beliebige Adressen schreiben — möglicherweise, um Funktionszeiger oder Rücksprungadressen zu überschreiben.

Praktische Schreibtechnik

So schreiben Sie mit %n einen bestimmten Wert:

  1. Kontrollieren Sie einen Zeiger auf dem Stack, der auf die Zieladresse zeigt
  2. Verwenden Sie %Xc%N$n, um X Zeichen zu schreiben, und schreiben Sie anschließend die Anzahl in den N-ten Parameter (die Zieladresse)

Werkzeuge wie pwntools automatisieren die Erstellung von Format-String-Exploits.

Format-String-Fehler finden

Format-String-Schwachstellen testen:

# Test inputs:
%x.%x.%x
%p.%p.%p
%s%s%s
AAAA.%p.%p.%p.%p (looking for 0x41414141 in output)

# Automated testing with fuzzer:
python3 -c "print('%p.' * 20)" | ./vuln

Schutzmaßnahme: Den Code korrigieren

Die Korrektur ist denkbar einfach: Übergeben Sie Benutzereingaben immer als Datenargument und niemals als Format-String.

// WRONG:
printf(buffer);

// RIGHT:
printf("%s", buffer);

// Compiler warning:
// gcc -Wformat-security will flag this

Format-Strings in anderen Sprachen

Format-String-Schwachstellen treten in vielen Sprachen auf:

  • C: printf(input)
  • Python: nicht auf dieselbe Weise — aber die Formatierung mit % und Dictionary-Eingaben kann Variablen offenlegen
  • Java: String.format(input) — weniger gefährlich, kein Speicherzugriff

Beispiele aus der Praxis

Format-String-Fehler haben folgende Software betroffen:

  • ProFTPD — ermöglichte Remote Code Execution über FTP-Befehle
  • WU-FTPD — Remote-Root-Exploit über Format-Strings
  • Verschiedene Linux-Daemons aus der Zeit vor den 2000er-Jahren

Moderne Compiler und FORTIFY_SOURCE helfen, beseitigen diese Fehlerklasse jedoch nicht vollständig.

Schnelltest: Format-Strings

Welcher Formatspezifizierer kann bei einem Format-String-Angriff verwendet werden, um an eine beliebige Speicheradresse zu schreiben?

Zusammenfassung der Lektion

Format-String-Schwachstellen entstehen, wenn Benutzereingaben direkt als printf-Format-String verwendet werden. %p/%x liest Stack-Speicher aus; %s liest beliebige Adressen; %n schreibt an beliebige Adressen. Die Korrektur besteht aus einem Zeichen: printf("%s", input). Aktivieren Sie -Wformat-security in den Compiler-Flags, um solche Fehler zu erkennen.

Häufig gestellte Fragen

Ist die Lektion „Format-String-Schwachstellen“ kostenlos?

Ja — der vollständige Text von „Format-String-Schwachstellen“ 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 „Format-String-Schwachstellen“?

Nutzen Sie printf-Formatstrings aus, um beliebigen Speicher zu lesen und an beliebige Adressen zu schreiben. 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 3 von 4.

Wie lange dauert die Lektion „Format-String-Schwachstellen“?

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

  1. Stack Buffer Overflows
  2. Return-Oriented Programming (ROP)
  3. Format-String-Schwachstellen
  4. Heap-Exploitation: Use-After-Free und Heap-Spraying
← Zurück zu Cyber Security Academy