Que fait exploitation-de-chaîne-de-format ?
Playbook d'exploitation de chaînes de format. Utilisez-le lorsque des fonctions de la famille printf reçoivent des chaînes de format contrôlées par l'utilisateur, permettant des lectures arbitraires de la pile (%p/%s), des écritures mémoire arbitraires (%n/%hn/%hhn), des écrasements de GOT/hooks, et des fuites de canary/libc/PIE.
Utilisation
- Identifier une vulnérabilité de chaîne de format dans un binaire. Les fonctions vulnérables incluent :
printf,sprintf,fprintf,dprintf,snprintf,vprintf, etc. - Analyser le format de la chaîne contrôlée par l'utilisateur.
- Calculer le décalage de la pile pour accéder aux arguments.
- Construire un payload de chaîne de format pour lire ou écrire des emplacements mémoire arbitraires.
- Exécuter l'exploit pour obtenir une exécution de code ou divulguer des informations sensibles.
Techniques
- Lectures arbitraires de la pile (%p/%s) : Utilisez
%ppour lire les valeurs de la pile en tant qu'adresses, ou%spour déréférencer une adresse et lire une chaîne terminée par null. Exemple :AAAA%p.%p.%p.%ppour afficher les 4 premiers arguments de la pile. - Écritures mémoire arbitraires (%n) : Utilisez
%npour écrire le nombre de caractères déjà imprimés à l'adresse pointée par un argument. Les variantes%hn(2 octets) et%hhn(1 octet) permettent des écritures plus précises. - Écrasement de GOT : Remplacez une entrée de la GOT pour rediriger un appel de fonction vers votre shellcode ou une fonction utile (par ex.,
system). Exemple :printf@gotremplacé parsystem. - Fuites d'adresses : Utilisation de
%ppour fuiter des adresse clés : canary, libc, PIE. Cela permet de contourner l'ASLR.
Exemple de payload
# Exemple avec pwntools
from pwn import *
# Connect to target
io = process('./vuln')
# Fuite d'adresse libc
payload = b'%7$p' # Ajustez selon le décalage
io.sendline(payload)
leaked = io.recvline()
# Construire un payload d'écriture
# Écrire dans la GOT
# Utiliser fmtstr_payload de pwntools
payload = fmtstr_payload(offset, {elf.got['printf']: elf.symbols['system']})
io.sendline(payload)
io.interactive()
Références
- Format String Exploitation - OWASP
- Phrack - Exploiting Format String Vulnerabilities
- Linux Format String Exploitation - CTF Wiki
Avertissement
Ce playbook est destiné à des fins éducatives et de test de sécurité autorisé uniquement. Une utilisation non autorisée est illégale et contraire à l'éthique.