Array Indexing

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Informazioni di Base

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 tutto verrà utilizzato come numero doppio e ordinato dal più piccolo al più grande, quindi è necessario creare un 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 garantendo 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 GOT exit 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. Sfrutta un cattivo indice per filtrare gli indirizzi di libc e heap dallo stack. Sfrutta il buffer overflow per eseguire un ret2lib chiamando system('/bin/sh') (è necessario l'indirizzo dell'heap per eludere un controllo).

Last updated