Todos sabemos que si un script no tiene permisos de ejecución podemos seguir ejecutándolo invocando el interprete e indicando el path hasta el script, lo que no sabe tanta gente es que se puede hacer lo mismo con ficheros binarios, de este modo logramos ejecutar binarios sin premisos de ejecución, el único requisito es tener permisos de lectura sobre este.
Escribimos un pequeño programa de ejemplo:
vi test.c
#include<stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
Compilamos el programa:
gcc test.c
Comprobamos que se ejecuta correctamente:
./a.out
Hello world!
Nos cercionamos de que tenga permisos de ejecución:
ls -la a.out
-rwxr-xr-x 1 kr0m kr0m 16600 may 13 23:37 a.out
Le quitamos los permisos de ejecución:
chmod -x a.out
ls -la a.out
ls -la a.out
-rw-r--r-- 1 kr0m kr0m 16600 may 13 23:37 a.out
Comprobamos que ya no podemos ejecutarlo directamente:
./a.out
bash: ./a.out: Permiso denegado
Comprobamos de que tipo de fichero se trata:
file a.out
a.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, not stripped
Ejecutamos el binario mediante el intérprete:
/lib64/ld-linux-x86-64.so.2 /home/kr0m/a.out
Hello world!