Necesito ejecutar una llamada a cat en un archivo de destino usando un desbordamiento de búfer en una aplicación de desafío (no se puede ejecutar en la pila, pero puedo usar libc). Para referencia, en C este es un código válido para lo que estoy tratando de hacer:
int main(void) {
char * const argv[] = {"cat", "/etc/target/file"};
char * const envp[] = {NULL};;
execve("/bin/cat", argv, envp);
}
Puedo cargar algunas cadenas terminadas en nulo en el destino y también he determinado la dirección de execve. Aquí está la información que tengo:
"/bin/cat" @ 0xbfffffb9:
"cat" @ 0xbfffffbe
"/etc/target/file" @ 0xbffff96f
execve @ 0x804831c
Puedo sobrescribir el EIP y los siguientes bytes con una cadena como:
"AAAA....AAA" + EIP + [RETURN ADDR] + ARG1 + ARG2 ....
En la cadena de arriba, puedo reemplazar el EIP con la dirección de execve y saltar a la función, pero ahí es donde las cosas se ponen feas para mí. Nunca he configurado una pila para matrices y no pude encontrar un ejemplo de Google sobre el uso de matrices en un desbordamiento de búfer clásico.
¿Cómo puedo configurar la pila con parámetros de matriz para mi llamada de función? ¿Cómo debe verse mi pila en este caso?