Come vengono posizionate le uova in memoria

0

Come viene messo un uovo in memoria prima dell'esecuzione del codice del cacciatore di uova?

Se un carico utile è troppo grande per il buffer di exploit ma un cacciatore di uova può trovare il carico utile, il carico utile viene anche inviato in blocchi più piccoli e spostato in memoria in precedenza? Se il carico utile viene memorizzato e fatto in fasi, come sono collegati i blocchi di memoria in modo che il cacciatore di uova possa trovare in seguito il carico utile completo? Immagino che ogni chunk potrebbe essere preceduto dalla chiave.

In che modo un singolo carico utile verrà archiviato in anticipo, se non c'è abbastanza spazio per iniziare?

    
posta jarryd 16.04.2018 - 18:47
fonte

2 risposte

1

Questo sarà specifico target (ad esempio un servizio o un protocollo). La maggior parte delle volte ti servirà un'opportunità per:

  1. copia il carico utile finale (più grande)
  2. copia il (più piccolo) codice di ricerca delle uova
  3. 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.

    
risposta data 17.04.2018 - 01:27
fonte
1

In genere è necessario trovare qualcosa che verrà memorizzato in una variabile appropriata nello stesso servizio per memorizzare l'uovo. L'egger più piccolo trova quindi l'uovo che hai precedentemente salvato.

    
risposta data 16.04.2018 - 22:55
fonte

Leggi altre domande sui tag