Passare gli array a una chiamata di funzione (buffer overflow)

1

Ho bisogno di eseguire una chiamata a cat su un file di destinazione usando un buffer overflow in un'app challenge (non può essere eseguita sullo stack, ma può usare libc). Per riferimento, in C questo è un codice valido per ciò che sto cercando di fare:

int main(void) {
        char * const argv[] = {"cat", "/etc/target/file"};
        char * const envp[] = {NULL};;
        execve("/bin/cat", argv, envp);
}

Posso caricare alcune stringhe con terminazioni nulle sul target e ho anche determinato l'indirizzo di execve. Ecco le informazioni che ho:

"/bin/cat" @ 0xbfffffb9:
"cat" @ 0xbfffffbe
"/etc/target/file" @ 0xbffff96f

execve @ 0x804831c

Posso sovrascrivere l'EIP e i seguenti byte con una stringa come:

"AAAA....AAA" + EIP + [RETURN ADDR] + ARG1 + ARG2 ....

Nella stringa sopra posso sostituire EIP con l'indirizzo di execve e saltare alla funzione, ma è lì che le cose vanno male per me. Non ho mai impostato uno stack per gli array e non sono riuscito a trovare un esempio su google di utilizzare gli array in un classico overflow del buffer.

Come posso impostare lo stack con i parametri dell'array per la mia chiamata di funzione? In questo caso, come deve essere il mio stack?

    
posta Juicy 11.07.2015 - 00:58
fonte

0 risposte

Leggi altre domande sui tag