Buffer overflow nello stack
Comprendete il layout dello stack e l'overflow di EIP/RIP e scrivete un exploit funzionante per un binario C vulnerabile.
Buffer overflow nello stack è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.
Che cos'è un buffer overflow?
Un buffer overflow si verifica quando vengono scritti più dati di quanti un buffer possa contenere. I dati in eccesso sovrascrivono la memoria adiacente, con la possibilità di danneggiare le strutture di controllo e reindirizzare l'esecuzione del programma.
Layout della memoria dello stack
Il call stack contiene: variabili locali (buffer), puntatore al frame salvato (SFP) e indirizzo di ritorno (RIP/EIP), cioè il punto in cui prosegue l'esecuzione dopo il ritorno della funzione. Il buffer overflow di un buffer locale può sovrascrivere l'indirizzo di ritorno.
Stack smashing classico
Se un programma chiama gets() o strcpy() senza verificare la lunghezza, un attaccante può inserire un numero di byte sufficiente a riempire il buffer e sovrascrivere l'indirizzo di ritorno con l'indirizzo dello shellcode o di un gadget utile.
// Vulnerable C code:
void vuln() {
char buf[64];
gets(buf); // No bounds checking!
}Individuare l'offset
Determini quanti byte sono necessari per raggiungere l'indirizzo di ritorno utilizzando la generazione di pattern:
# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"Protezioni: stack canary
Uno stack canary è un valore casuale posizionato tra le variabili locali e l'indirizzo di ritorno salvato. Prima del ritorno, il canary viene verificato: se è stato sovrascritto, il programma termina. Deve essere aggirato per sfruttare un buffer overflow classico.
Protezioni: ASLR
Randomizzazione del layout dello spazio degli indirizzi (ASLR) randomizza l'indirizzo di base dello stack, dell'heap e delle librerie a ogni esecuzione. Senza un leak di un indirizzo corrente, indovinare dove effettuare il salto è impraticabile sui sistemi a 64 bit.
Protezioni: NX/DEP
NX (No-Execute) / DEP (Data Execution Prevention) contrassegna lo stack come non eseguibile. Non è possibile eseguire direttamente la shellcode iniettata nel buffer. Questo costringe gli attaccanti a usare il Return-Oriented Programming (ROP).
Furto di indirizzi
Per eludere ASLR, gli attaccanti hanno bisogno di un information leak: vulnerabilità di format string, letture oltre i limiti dell'heap (come Heartbleed) oppure un puntatore leggibile nella funzione sfruttata. Un solo indirizzo trapelato rivela l'offset e consente di calcolare gli altri indirizzi.
Scrivere un exploit di base
Un overflow dello stack a 32 bit senza protezioni:
# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()Tecnica ret2libc
ret2libc elude NX tornando a funzioni di libc (come system()) invece di usare la shellcode. L'attaccante sovrascrive l'indirizzo di ritorno con l'indirizzo di system e passa "/bin/sh" come argomento.
Strumenti per lo sviluppo di exploit
Strumenti essenziali:
- pwntools — libreria Python per gli exploit
- GDB + pwndbg/peda — debugger con strumenti di supporto per gli exploit
- checksec — mostra le protezioni del binario
- ROPgadget / ropper — trovano catene ROP
checksec --file=./vulnVerifica rapida: overflow dello stack
Quale mitigazione inserisce un valore casuale tra le variabili locali e l'indirizzo di ritorno salvato, terminando il programma se viene sovrascritto?
Riepilogo della lezione
Gli overflow dei buffer nello stack sovrascrivono l'indirizzo di ritorno riempiendo un buffer oltre i suoi limiti. Le protezioni includono i canary dello stack (rilevano le sovrascritture), ASLR (randomizza gli indirizzi) e NX/DEP (rende lo stack non eseguibile). ret2libc elude NX. I leak di informazioni eludono ASLR. pwntools semplifica lo sviluppo degli exploit.
Domande Frequenti
La lezione «Buffer overflow nello stack» è gratuita?
Sì — il testo completo di «Buffer overflow nello stack» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.
Cosa imparerò in «Buffer overflow nello stack»?
Comprendete il layout dello stack e l'overflow di EIP/RIP e scrivete un exploit funzionante per un binario C vulnerabile. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cyber Security Academy?
Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Buffer overflow nello stack»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?
Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Buffer overflow nello stack
- Return-Oriented Programming (ROP)
- Vulnerabilità di format string
- Sfruttamento dell'heap: use-after-free e heap spraying