Confusione del layout del payload ROP

2

Stavo leggendo un articolo ( exploitresearch.wordpress.com ) sull'uso del ROP per ignorare DEP / ASLR. Verso la fine espone i 33 gradini per il suo carico utile. Questi sono disposti nell'ordine in cui le istruzioni del codice shell sono scritte nel carico utile finale (mostrato anche nell'ultima immagine HxD @ offset 304). Sono un po 'confuso dai primi dwords:

1) 0x100016f0 (pop eax)
2) 0x01a19f7f (a value)
3) 0x10002fd7 (pop ecx)
4) 0x100bcc5a (another value)
5) mov [ecx], eax (*0x100bcc5a = 0x01a9f7f, delta between GetTimeZoneInformation and VirtualProtect)

In che modo pop eax viene seguito dall'indirizzo di un valore che salva quel valore in eax? Pensavo che avresti dovuto spingere il valore poi pop eax.

    
posta Nitro 21.03.2017 - 07:11
fonte

1 risposta

2

Non è necessario eseguire alcuna operazione di spinta dal momento che controlli già lo stack. Puoi avere i dati che desideri archiviare nei tuoi registri già posizionati dove puoi comodamente eseguire operazioni con loro.

In ROP, trovi una serie di frammenti di codice utili già presenti nel tuo programma di destinazione a cui puoi fare riferimento come gadget, che sono in genere le estremità di subroutine normali che eseguono operazioni necessarie per uno sfruttamento efficace. Allinea gli indirizzi dei gadget che desideri eseguire e i dati che desideri utilizzare con loro all'interno di una finta pila nella memoria che controlli prima di eseguire uno "stack pivot" per spostare il puntatore dello stack (esp in x86) in i tuoi dati.

Dopo che il puntatore dello stack è stato spostato nei tuoi dati, il controllo del programma sarà perso per il tuo stack falso al prossimo ret . Quando questa istruzione viene eseguita, la parola / l'indirizzo in cima allo stack (0x100016f0 nel tuo esempio) verrà estratta e posizionata nel contatore del programma per reindirizzarla in un gadget sulla coda di alcune funzioni sembra pop eax; ret; .

Se la parola successiva nello stack è 2) 0x01a19f7f (a value) , il puntatore dello stack punta già a questi dati quando viene eseguita l'istruzione pop , memorizzando questa parola nel registro eax.

Quindi, ret per seguire immediatamente i popup del prossimo indirizzo del gadget ROP per continuare l'esecuzione.

    
risposta data 21.03.2017 - 13:50
fonte

Leggi altre domande sui tag