PHP 5.3.9 Guida alle vulnerabilità

8

Questa è una delle prime vulnerabilità che ho cercato di sfruttare da sola per espandere la mia conoscenza degli exploit.

Questo è un buon riepilogo del la vulnerabilità . Sono stato in grado di controllare EIP ma non sono sicuro di come eseguire il codice.

La mia macchina di prova è Ubuntu 11.10 e ha ASLR abilitato insieme a NX per lo stack, l'heap e le librerie. La stringa che controllo (come descritto nell'articolo) è archiviata nell'heap in modo che non possa inserire alcun codice lì poiché non è eseguibile. Oltre a EIP I controllo anche il registro EDI, ma questo è tutto. Questo è un sistema a 32 bit, quindi la forza bruta è sufficiente per sconfiggere l'ASLR (in più non ho altri meccanismi di sicurezza, non molto realistici, ma un buon inizio).

EDIT:

Hai trovato questo PoC . Fondamentalmente l'autore arriva nello stesso posto in cui sono io e quindi si affida al codice sul server PHP per fare un passo furthur per poter leggere la memoria del processo Apache. Dichiara che l'esecuzione del codice è "altamente possibile" ma non fornisce molti dettagli oltre a questo.

    
posta Bhubhu Hbuhdbus 04.07.2012 - 04:24
fonte

1 risposta

1

Questa è una brutta vulnerabilità molto simile a un Dangling Pointer . In breve, consente a un utente malintenzionato remoto di leggere e / o scrivere su un indirizzo di memoria arbitrario. Questo è molto più prezioso di un semplice overflow del buffer basato sullo stack, specialmente nello sfruttamento dei sistemi moderni. Un exploit di esecuzione di codice remoto solido per questa vulnerabilità non è emerso al pubblico. Tuttavia Vupen, un noto commerciante di exploit, potrebbe aver sviluppato un simile exploit .

Poiché si tratta anche di una vulnerabilità di divulgazione della memoria, non è necessario utilizzare la forza bruta per aggirare l'ASLR. exploit è stato scritto per leggere il Indirizzo di memoria ASLR del luogo in cui il payload è in memoria.

C'è ancora il problema di controllare l'EIP. Non ho visto un exploit che faccia questo, ma sembra possibile, forse con una sovrascrittura GOT o corrompere il frame dello stack.

Dopo l'EIP / RIP hai alcune opzioni. Un'opzione è usare Return Oriented Programming (catena ROP) per eseguire codice arbitrario. Le catene ROP sono costituite da utili "gadget" o segmenti di assembler all'interno dell'applicazione che svolgono un compito utile e questi compiti sono concatenati. Un gadget ROP comune controlla EIP / RIP con jmp edx . Un altro utile gadget ROP sarebbe una chiamata a system() , tenere presente che a causa di ASLR una chiamata ret2libc a system() avrà esito negativo perché non si conosce l'indirizzo di questa funzione, quindi la necessità di gadget ROP. Questi sono alcuni semplici esempi, tuttavia le catene ROP possono anche essere molto complesse. Le catene ROP sono utili perché consistono in codice che deve essere eseguibile e non randomizzato. Esistono strumenti per aiutarti a trovare i gadget ROP in un'applicazione di destinazione. In un'applicazione come Apache, ci sono sicuramente molti gadget ROP utili.

Oppure un'altra opzione è quella di filtrare la memoria per trovare un indirizzo di memoria che puoi posizionare un payload. Quindi sconfigge il bit NX (che potrebbe richiedere una catena ROP ) per rendere eseguibile il payload e puntare l'EIP / RIP sul payload.

Boom.

    
risposta data 11.07.2012 - 21:33
fonte

Leggi altre domande sui tag