indirizzo a 3 byte della chiamata di sistema e uscita [chiuso]

0

Sto provando a sfruttare una vulnerabilità di buffer overflow in ubuntu (kernel versione 3.0.0-12 i686 generica) utilizzando il metodo return in libc e lo stack non sta sfruttando?

Durante lo sfruttamento ho capito che l'indirizzo di chiamata di sistema e chiamata di uscita è di dimensione 3 byte a causa del quale penso di non essere in grado di sfruttare lo stack nel modo corretto .. qualcuno può aiutare come posso capisci questo ?? dovrei aggiungere un 0x00 nell'indirizzo

    
posta user38257 25.05.2014 - 16:17
fonte

1 risposta

1

Non sono sicuro di cosa intendi con "l'indirizzo è 3 byte" (a meno che tu non sia su un sistema a 24 bit?) :) Gli indirizzi di memoria sono probabilmente a 32 bit (4 byte), ma gli indirizzi hanno probabilmente un byte null in loro, quindi vuoi un modo per introdurre un byte null nel tuo shellcode.

Quello che puoi fare è un spostamento di bit su un registro. Questo - come suggerisce il nome - sposterà i bit nella direzione desiderata; proprio in questo caso, e riempire con zeri. (0x11223344 - > 0x00112233)

Il codice seguente renderà EAX in 0x00112233

05 44 33 22 11    add    $0x11223344,%eax
c1 e8 08          shr    $0x8,%eax

E come puoi vedere nei codici esadecimali, non è stato introdotto alcun byte null nello shellcode.

In alternativa, puoi lavorare con registri inferiori (ax, al, ...) e ruotare tutti i bit in giro. Di voi è possibile calcolare il valore inverso utilizzando un NOT bit a bit, ad esempio: 0xffedcba9 è il valore NOT bit a bit di 0x00123456. Oppure potresti inserire i valori XOR 2 per raggiungere il tuo indirizzo.

    
risposta data 03.06.2014 - 08:07
fonte

Leggi altre domande sui tag