Array Indexing
Last updated
Last updated
Impara e pratica l'Hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'Hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)
Questa categoria include tutte le vulnerabilità che si verificano perché è possibile sovrascrivere determinati dati attraverso errori nella gestione degli indici negli array. Si tratta di una categoria molto ampia senza una metodologia specifica poiché il meccanismo di sfruttamento si basa completamente sulle condizioni della vulnerabilità.
Tuttavia, qui puoi trovare alcuni bei esempi:
Ci sono 2 array in collisione, uno per gli indirizzi in cui sono memorizzati i dati e uno con le dimensioni di tali dati. È possibile sovrascrivere uno con l'altro, consentendo di scrivere un indirizzo arbitrario indicandolo come dimensione. Ciò consente di scrivere l'indirizzo della funzione free
nella tabella GOT e quindi sovrascriverlo con l'indirizzo di system
, e chiamare free da una memoria con /bin/sh
.
64 bit, no nx. Sovrascrivere una dimensione per ottenere una sorta di buffer overflow in cui ogni cosa verrà utilizzata come numero doppio e ordinata dal più piccolo al più grande, quindi è necessario creare uno shellcode che soddisfi tale requisito, tenendo conto che il canary non dovrebbe essere spostato dalla sua posizione e infine sovrascrivere il RIP con un indirizzo a ret, che soddisfa i requisiti precedenti e mettendo l'indirizzo più grande un nuovo indirizzo che punta all'inizio dello stack (leaked dal programma) in modo da poter utilizzare il ret per saltare lì.
64 bit, no relro, canary, nx, no pie. C'è un off-by-one in un array nello stack che consente di controllare un puntatore concedendo WWW (scrive la somma di tutti i numeri dell'array nell'indirizzo sovrascritto dall'off-by-one nell'array). Lo stack è controllato in modo che l'indirizzo exit
della GOT venga sovrascritto con pop rdi; ret
, e nello stack viene aggiunto l'indirizzo a main
(tornando a main
). Viene utilizzata una catena ROP per filtrare l'indirizzo di put nella GOT usando puts (exit
verrà chiamato quindi chiamerà pop rdi; ret
eseguendo quindi questa catena nello stack). Infine viene utilizzata una nuova catena ROP che esegue ret2lib.
32 bit, no relro, no canary, nx, pie. Abuso di un cattivo indicizzazione per filtrare gli indirizzi di libc e heap dallo stack. Sfrutta il buffer overflow per fare un ret2lib chiamando system('/bin/sh')
(è necessario l'indirizzo dell'heap per eludere un controllo).