ROP Attack: forza il programma a manipolare un'istruzione come gadget

1

Sto facendo test di sfruttamento di base su un semplice programma con fiew linee di codice. Intendo sfruttare una vulnerabilità di buffer overflow per eseguire un attacco ROP. Per raccogliere i gadget disponibili uso lo strumento ROPgadget. Ho trovato un gadget molto utile all'indirizzo diciamo addr , questo indirizzo è l'inizio di un'altra legittima istruzione per il programma.

È possibile utilizzare questo gadget o no? In caso affermativo, in che modo il processore eseguirà il gadget e non l'istruzione legittima sapendo che entrambi iniziano allo stesso indirizzo addr

    
posta Ahmed 24.05.2018 - 11:08
fonte

1 risposta

3

Risposta breve: .

Risposta lunga:

Le istruzioni sui processori x86 variano nella loro lunghezza tra 1 e molti byte. (Funziona perché nessuna istruzione può essere un prefisso di un'altra istruzione.Molto come i numeri di telefono.Vedi questo tipo per la teoria alla base it.)

La CPU vede tutto come byte e non sa cosa intendesse il compilatore, quindi se si punta il puntatore dell'istruzione su una memoria eseguibile, la CPU non si preoccupa se decodifica su un'istruzione valida. Continuerà quindi l'esecuzione finché non incontrerà alcun tipo di errore.

Esempio:

89 EB FE 40 C3

Se salti sul primo byte ottieni:

89 EB FE 40 C3 : mov EAX, 0xC340FEEB

Se salti al secondo byte, ottieni:

EB FE : jmp $, endless loop, will spin forever

Se salti al terzo byte, ottieni:

FE 40 C3: INC BYTE [EAX-0x30]

Se salti al quarto byte, ottieni:

40: INC EAX
C3: RET

Guarda, un gadget ROP! Aumenta EAX quindi restituisce.

Qual è l'istruzione "reale" che intendeva il programmatore? Che importa?

L'intero concetto è ciò che rende ROP così facile con i processori x86. Per esempio. MIPS, dove non puoi saltare nel mezzo delle istruzioni, è molto più difficile trovare buoni gadget.

    
risposta data 24.05.2018 - 13:28
fonte

Leggi altre domande sui tag