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?