Offset in pila

0

Offset in buffer overflow Non riesco a capire. Ecco una citazione dal libro che sto leggendo su questo argomento.

The address of the variable "i" in main()'s stack frame is used as a point of reference. Then an offset is subtracted from that value; the result is the target return address.

  1. Che cos'è un offset?
  2. Perché ho bisogno dell'offset durante lo sfruttamento?
  3. In che modo l'utilizzo di una posizione di pila nelle vicinanze come una cornice di riferimento aiuta la mia capacità di trovare un offset?
  4. Spiega come la citazione sopra trova l'indirizzo di ritorno usando un offset
posta Samuel F 25.07.2016 - 00:58
fonte

1 risposta

2

Quando si sommerge un buffer per scrivere sullo stack in un modo che è sfruttabile, si sovrascriverà l'indirizzo di ritorno nello stack. Ad esempio, l'invio di una stringa lunga di AAAAAAAAAAAAAAAAAAAAAAAAAAA.....AAAAAAAAA comporterà EIP contenente il valore 0x41414141 quando l'applicazione si arresta in modo anomalo.

Le ragioni di ciò sono ben documentate in molti luoghi su Internet. Aleph1 sta distruggendo lo stack per divertimento e profitto o I tutorial di Corelan sono ottimi posti per leggere più informazioni, ma per la domanda a portata di mano .

Pur avendo il controllo di EIP è grandioso, non porta immediatamente al codice in esecuzione di tua scelta. Quando l'epilogo della funzione apre l'indirizzo di ritorno dello stack, continuerà a eseguire le istruzioni in quella posizione di memoria. Quindi dovrai fornire un valore diverso da 0x41414141 . Il primo problema è che non sai quale 4% diA nella tua stringa sia quello che si trova in EIP . Questa distanza dal primo A al 4 A che sovrascrive EIP viene comunemente chiamata offset. Puoi elaborarlo manualmente scambiando tra i valori suc come AAAABBBBCCCCDDDD....etc oppure puoi utilizzare uno dei generatori di schemi in grado di calcolare l'offset per te.

Una volta che conosci l'offset puoi hardcode l'indirizzo in cui il codice shell dovrebbe sedersi nello stack (più facile per i principianti) o trovare un gadget che ti ricollerà nello stack dove è il tuo codice shell (es: jmp esp ) e scrivere quella posizione di memoria su EIP .

    
risposta data 25.07.2016 - 03:02
fonte

Leggi altre domande sui tag