Questo sarà specifico target (ad esempio un servizio o un protocollo). La maggior parte delle volte ti servirà un'opportunità per:
- copia il carico utile finale (più grande)
- copia il (più piccolo) codice di ricerca delle uova
- attiva l'exploit
In un tipico overflow dello stack probabilmente verranno combinati il secondo e il terzo passo. Nota che il codice della caccia alle uova ha bisogno di atterrare da qualche parte eseguibile, ma il carico utile no, se la caccia alle uova è sufficientemente intelligente.
Immagina un programma ipotetico. Potrebbe trattarsi dell'implementazione di un protocollo di rete (come HTTP, SMTP, LDAP, ecc.) O del codice di analisi dei file (magari un'immagine o un parser XML).
Il processo sarebbe qualcosa di simile a:
- avvia una sessione: apre una nuova connessione o avvia l'analisi di uno stream
- invia l'input che copia i dati collettivi: forse una prima richiesta HTTP o qualche kilobyte di dati immagine
- innescare una vulnerabilità: forse una seconda richiesta HTTP pipeline o una struttura rotta nel formato immagine
- caccia all'uovo in tutte le aree di memoria, quindi passa al carico utile (forse allocando memoria, copiando e impostando prima le autorizzazioni corrette)
Durante il processo di scrittura dell'exploit verrà speso un sacco di tempo per inviare input e capire dove finisce nella memoria (e per quanto tempo). Queste abilità sono direttamente trasferibili ad altre attività come fuzzing.