Array Indexing
Last updated
Last updated
Impara e pratica il Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il Hacking 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. È 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 esempi:
Ci sono 2 array in collisione, uno per indirizzi dove i dati sono memorizzati e uno con le dimensioni di quei dati. È possibile sovrascrivere uno dall'altro, consentendo di scrivere un indirizzo arbitrario indicandolo come dimensione. Questo consente di scrivere l'indirizzo della funzione free
nella tabella GOT e poi sovrascriverlo con l'indirizzo di system
, e chiamare free da una memoria con /bin/sh
.
64 bit, no nx. Sovrascrivi una dimensione per ottenere una sorta di buffer overflow dove tutto verrà utilizzato come un numero doppio e ordinato dal più piccolo al più grande, quindi è necessario creare uno shellcode che soddisfi quel requisito, tenendo conto che il canary non dovrebbe essere spostato dalla sua posizione e infine sovrascrivere il RIP con un indirizzo per ret, che soddisfi i requisiti precedenti e mettendo il più grande indirizzo a un nuovo indirizzo che punta all'inizio dello stack (leaked dal programma) in modo che sia possibile 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 quindi l'indirizzo GOT exit
è sovrascritto con pop rdi; ret
, e nello stack viene aggiunto l'indirizzo a main
(ritornando a main
). Viene utilizzata una catena ROP per leakare 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. Abusa di una cattiva indicizzazione per leakare indirizzi di libc e heap dallo stack. Abusa del buffer overflow per fare un ret2lib chiamando system('/bin/sh')
(l'indirizzo heap è necessario per bypassare un controllo).