Il bit NX causa segfault sulla diapositiva NOP?

5

fare un incarico per l'università.

Dobbiamo eseguire una shell su un server remoto. Ci viene detto che il bit NX non è impostato, tuttavia, quando reindirizziamo al nostro codice inserito, il server ha un errore di segmentazione. Ho ragione nel pensare che il bit sia, in effetti, impostato in questo caso? Il codice iniettato è un carico di NOP seguito da qualche codice shell in un buffer. Sovrascriviamo EIP per reindirizzare verso l'inizio del buffer (nella diapositiva NOP) ma all'istante viene rilevato un errore di seg.

Grazie per l'aiuto!

    
posta Richard 07.12.2012 - 18:18
fonte

1 risposta

8

Se passi attraverso un'istruzione alla volta e il segfault si verifica immediatamente dopo il salto (e non quando colpisci qualche shellcode potenzialmente rotto alla fine della slitta NOP, che potrebbe anche causare un segfault), e sei sicuro che l'indirizzo sia corretto, punta alla memoria valida e che la tua slitta NOP non è rotta, quindi sì sembra plausibile che il segfault sia causato da DEP.

Tuttavia, le altre cose che elenco sopra sono più probabilmente a mio parere, e ci sono molti altri motivi per cui potrebbe apparire un segfault.

Solo così siamo certi di avere tutto a posto in gdb;

Dovresti avere un breakpoint appena prima che l'istruzione di ritorno che hai danneggiato. Puoi farlo tramite i comandi disas e break .

Una volta che il programma ha raggiunto il tuo punto di interruzione, vuoi controllare la posizione del terreno. Controlla eip con il comando info r . E dai un'occhiata al tuo stack usando cose come x/40x $esp . Dovresti essere in grado di vedere ripetutamente la tua slitta di Nop, lo shellcode e l'indirizzo di ritorno. Un'altra nota che mi è venuta in mente; l'indirizzo di ritorno deve essere allineato correttamente, solitamente questo significa mettere 1-3 nops dopo lo shellcode per inserirlo in posizione.

Se tutto sembra in ordine, è ora di eseguire un step . Se info r ora segnala che eip contiene un indirizzo che si trova sulla tua slitta di nop, controlla questo con x %eip , dovresti vedere 0x90909090 . Quindi premi nuovamente step . Se a questo punto ottieni un segfault, allora sì (per rispondere alla tua domanda originale : P) hai DEP attivato su IMHO.

Scusa se era tutto ciò che già sapevi, è fondamentale controllare tutto più volte quando giochi con gli exploit di memoria.

    
risposta data 07.12.2012 - 18:34
fonte

Leggi altre domande sui tag