0Pricing
Ethical Hacking Academy · Lezione

Fuzzing per trovare i crash

Individuare l'offset

Fuzzing per trovare i crash è una lezione Ethical Hacking Academy gratuita su CoddyKit. Questa è la lezione 2 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 Ethical Hacking Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ethical Hacking Academy include 4 lezioni in totale.

Che cos'è il fuzzing?

Il fuzzing consiste nell'inviare a un programma input malformati o sovradimensionati per provocare un comportamento imprevisto, in particolare un crash. Un crash spesso segnala un bug di corruzione della memoria.

Nel caso dei buffer overflow, il primo obiettivo è mandare in crash il programma, per verificare l'esistenza di un overflow.

Il flusso di lavoro

Il classico flusso di lavoro per lo sfruttamento è:

  • Eseguire il fuzzing per mandare in crash il programma.
  • Trovare l'offset esatto fino all'indirizzo di ritorno.
  • Controllare EIP.
  • Reindirizzare l'esecuzione allo shellcode.

Questa lezione tratta i primi due passaggi.

Collegare un debugger

Per osservare i crash, colleghi un debugger (ad esempio Immunity Debugger o x64dbg su Windows, oppure GDB su Linux) al programma bersaglio.

Quando il programma va in crash, il debugger mostra lo stato dei registri, in particolare di EIP, rivelando se l'indirizzo di ritorno è stato sovrascritto.

Inviare input di lunghezza crescente

Un fuzzer semplice invia stringhe sempre più lunghe finché il programma va in crash. Un punto di partenza comune consiste nell'inviare molti caratteri «A» (0x41).

Se dopo il crash EIP mostra 41414141, ha confermato il controllo sull'indirizzo di ritorno.

python -c 'print("A"*2000)' | ./vuln

Confermare il crash

Quando l'applicazione va in crash e EIP è uguale a 41414141, l'overflow ha raggiunto l'indirizzo di ritorno salvato.

Tuttavia, non sa ancora esattamente quanti byte precedono EIP. Inviare sempre lo stesso byte conferma che EIP è controllabile, ma non indica dove si trova.

Trovare l'offset: pattern ciclici

Per trovare l'offset preciso, invii un pattern univoco non ripetitivo invece di usare solo «A». Ogni finestra di 4 byte è distinta, quindi il valore che finisce in EIP identifica l'offset.

Metasploit include pattern_create.rb per questo scopo.

msf-pattern_create -l 2000

Leggere l'offset

Dopo il crash con il pattern, annoti il valore presente in EIP. Lo passi a pattern_offset.rb, che restituisce il numero esatto di byte prima di EIP.

Questo offset corrisponde alla dimensione del padding prima dei byte dell'indirizzo di ritorno.

msf-pattern_offset -l 2000 -q 39654138

Verificare l'offset

Verifichi sempre il risultato. Costruisca un input composto da offset byte «A», seguiti da quattro byte «B» (0x42). Se EIP diventa 42424242, l'offset è esatto.

Questa conferma evita di perdere ore a eseguire il debug di un errore di pochi byte più avanti.

"A"*offset + "B"*4   # EIP should become 42424242

Individuare ESP

Dopo aver preso il controllo di EIP, annoti anche dove punta ESP al momento del crash. Di solito ESP punta subito dopo l'indirizzo di ritorno sovrascritto, all'interno del buffer rimanente.

Sarà questo lo spazio in cui inserirà successivamente lo shellcode.

Riepilogo degli strumenti

Tra gli strumenti utili per il fuzzing e i pattern sono inclusi:

  • Spike e boofuzz: fuzzer per protocolli di rete.
  • pattern_create / pattern_offset: individuano l'offset di EIP.
  • mona.py in Immunity: automatizza le attività relative a pattern, offset e caratteri non validi.
!mona pattern_create 2000

L'importanza della riproducibilità

Un crash utile deve essere riproducibile. Salvi l'input esatto che lo provoca e ripeta l'esecuzione partendo da uno stato pulito, per confermare che l'offset sia stabile.

I crash incoerenti spesso indicano che il bug non è un semplice stack overflow oppure che una condizione (tempistica, lunghezza o contenuto) varia tra un'esecuzione e l'altra.

Verifica rapida

Ricordi perché un pattern ciclico è migliore di una stringa composta da byte identici.

Riepilogo

Ora sa come trovare l'offset del crash:

  • Esegua il fuzzing con input di lunghezza crescente per provocare un crash; lo confermi con 41414141 in EIP.
  • Usi un pattern ciclico con pattern_create / pattern_offset per trovare l'offset esatto.
  • Verifichi il risultato con padding seguito da quattro byte «B» (42424242).
  • Annoti dove punta ESP per inserire successivamente lo shellcode.

Nel prossimo passaggio prenderà completamente il controllo di EIP e reindirizzerà l'esecuzione.

Domande Frequenti

La lezione «Fuzzing per trovare i crash» è gratuita?

Sì — il testo completo di «Fuzzing per trovare i crash» è 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 Ethical Hacking Academy, passa a CoddyKit PRO. Il corso Ethical Hacking Academy include 4 lezioni in totale.

Cosa imparerò in «Fuzzing per trovare i crash»?

Individuare l'offset Eserciti Ethical Hacking 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 Ethical Hacking Academy?

Non è richiesta alcuna esperienza precedente. Ethical Hacking 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 2 di 4.

Quanto tempo richiede la lezione «Fuzzing per trovare i crash»?

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 Ethical Hacking Academy?

Sì. Ogni lezione Ethical Hacking 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

  1. Memoria e stack
  2. Fuzzing per trovare i crash
  3. Controllo di EIP
  4. Shellcode ed exploit
← Torna a Ethical Hacking Academy