Fuzzing: trova rapidamente il numero esatto di byte

1

Attualmente sto praticando il buffer overflow. E ho una domanda per te riguardo la fuzzing.

Sono in grado di sviluppare uno script Python che proverà diverse dimensioni del buffer per bloccare un'applicazione. Funziona bene e restituisce la dimensione del buffer a cui l'applicazione si è bloccata.

Tuttavia, il valore che ottengo dal mio script non è necessariamente la dimensione che "consente la riscrittura EIP" . Per trovare questa dimensione del buffer, di solito devo brancolare ...

Il problema è che, quando cerco il numero esatto di byte, sono costretto a:

  1. Avvia il mio debugger (edb-debugger) su kali.
  2. Avvia l'applicazione
  3. Avvia il mio script con +1 o -1 nella dimensione del buffer
  4. Verifica se EIP viene sovrascritto

Se questo non è il caso, ricomincio più e più volte ...

È un'operazione che fa perdere troppo tempo . Possiamo fare questo passo più velocemente? Con un'impostazione aggiuntiva nel debugger che riavvierà automaticamente l'applicazione fino a quando EIP non verrà sovrascritto? O con un'impostazione specifica in uno script?

Nel mio caso l'applicazione (crossfire) si blocca prima a 4377 byte. ma EIP non viene sovrascritto.

4378 byte, è la stessa cosa.

E 4379 byte, è buono !! EIP è sovrascritto!

Ma quando provo 4380 (o superiore), EIP non viene sovrascritto ... e non capisco perché.

    
posta 3r4inZ 28.05.2018 - 22:22
fonte

1 risposta

2

Forse sto fraintendendo, ma in genere sovrascrivere troppo non è un problema.

L'approccio comune è quindi quello di sovrascrivere più del necessario, ma utilizzando un modello specifico. Osservando ciò che finisce in EIP e cercandolo nel pattern, ti dirò la posizione esatta dei dati che finirà in EIP.

Gli strumenti di exploit di solito hanno questo, per esempio PEDA ha la funzionalità pattern .

    
risposta data 28.05.2018 - 23:12
fonte

Leggi altre domande sui tag