Come organizzo il mio input per un buffer overflow?

4

Ho un binario linux a 32 bit che è suscettibile di un buffer overflow. Ho capito che ho bisogno di inserire 1040 byte prima di poter controllare il registro EIP.

Ho una dimensione shellcode di 28 byte. Come posso organizzare questo input per riempire il buffer, inserire il mio shellcode e impostare EIP sull'indirizzo del primo byte dello shellcode?

Ho provato a inserire lo shellcode a 1040-28 byte, quindi l'indirizzo, ma non ha funzionato.

    
posta user1710563 22.03.2018 - 21:56
fonte

1 risposta

0

L'obiettivo qui è di rendere eip punto al tuo shellcode. Ci sono molti modi per farlo. La prima cosa sarebbe controllare se il tuo shellcode è inserito in un registro. Se ciò accade, puoi eseguire un ret2reg ( return to register ) trovando un gadget che ti consentirà di tornare a quel registro ( come call reg etc ... ) . Un altro modo sarebbe quello di utilizzare un nopsled - ma non è così stabile. In questo caso il tuo payload potrebbe essere come:

nops + shellcode + (1040 -len(nops+shellcode))*"A" + pack32(a_nop_address)

Tieni presente però che "a_nop_address" dal payload sopra riportato cambia all'interno di gdb e non sarà stabile nel caso in cui aslr sia abilitato. Tutti i modi precedenti presuppongono che lo stack sia eseguibile ovviamente. Un altro modo è anche usare una variabile di shell che conterrà il tuo shellcode e quindi renderà eip punto a quell'indirizzo. Infine, ci sono anche metodi più avanzati, come ret2libc, ret2plt, ROP etc ... , che non usano nemmeno uno shellcode per aprire una shell e possono anche aiutare a bypassare alcune mitigazioni di sicurezza come aslr e pila non eseguibile.

    
risposta data 22.03.2018 - 23:03
fonte

Leggi altre domande sui tag