Programmazione orientata al ritorno senza int 0x80

7

Ho un programma con un overflow del buffer basato sullo stack. È in esecuzione PIE con ASLR e DEP, tuttavia esiste una sezione di codice eseguibile che si trova in una posizione fissa.

Tuttavia, questa regione non contiene un 0x80 int; ret gadget. Posso controllare eax, ebx, ecx ed edx. Come posso eseguire syscalls arbitrarie, per esempio, chiamare mprotect e leggere in shellcode? Ogni syscall sembra richiedere un 0x80 int e non sono sicuro di come ignorarlo.

C'è un gadget int 0x80 nel codice rilevante, tuttavia è seguito da un'istruzione jmp.

Quindi sto cercando un modo per creare syscalls senza 0x80, o un modo per creare due syscalls contemporaneamente (per impostare protezioni di memoria, leggere ed eseguire shellcode)

    
posta robertkin 21.03.2015 - 17:12
fonte

1 risposta

2

int 0x80 è un modo davvero vecchio per effettuare chiamate di sistema. Non sono sicuro che sia ancora supportato. Potresti voler cercare le istruzioni syscall / systenter nell'immagine. Ovviamente questo dipende da quale hardware e sistema operativo in uso. Se stai usando un emulatore vm hardware / hardware e un software più recente rispetto al 1995, probabilmente dovresti cercare le istruzioni syscall / sysenter.

Syscall / Sysenter vengono utilizzati (l'uno o l'altro utilizzato a seconda che l'eseguibile sia a 32 bit o 64 bit) per effettuare chiamate di sistema. La configurazione del registro per l'uso di syscall e int 0x80 dovrebbe essere la stessa. Dovresti essere in grado di trovare facilmente syscall / sysenter. la maggior parte delle applicazioni dovrebbe avere vdso.so mappato nel suo spazio indirizzo. Puoi forse usare questa conoscenza per trovare il gadget syscall ret. Segnala

link

non puoi creare due syscall sullo stesso core allo stesso tempo.

    
risposta data 23.03.2015 - 00:57
fonte

Leggi altre domande sui tag