Conseguir una shell de root
Publicado el 15 de Enero ,2008 por ekhtorLa forma más sencilla y efectiva de conseguir una shell con permisos de root en Linux es a través de de un archivo ejecutable con permiso suid de root, al que podamos acceder.
Además de ser la forma más sencilla, es la forma más sigilosa. No dejamos ningún rastro en el sistema ya que todo lo que hagamos con esta consola, quedará registrado como usuario root.
Este fallo actualmente no es tan fácil de explotar ya que, la ‘bash’ que es la consola que trae nuestro querido Ubuntu, tiene un sistema de seguridad que no permite conseguir privilegios de root a través del suid, asique aunque le diéramos los permisos con chmod 4555 /bin/bash , un usuario normal no accedería como root al ejecutarla.
Para conseguir engañar a la bash, tenemos que compilar el siguiente código en C y es necesario que el ejecutable generado tenga como propietario a ‘root’.
#include <unistd.h>
#include <stdlib.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
uid_t uid, euid;
uid = getuid();
euid = geteuid();
setreuid(euid, euid);
system("/bin/bash");
return 0;
}
Para compilar el programa en c usaremos el gcc y el archivo con el código fuente será ’shell.c’ y el ejecutable ’shell’:
Hay que acordarse de cambiar el propietario a root si no hemos compilado como root.
Ahora tenemos que darle permisos suid:
Por último sólo queda ejecutarlo y al hacerlo como usuario normal, veremos si hacemos un ‘id’ que nuestro uid es ‘0′ , osea, de root.
# id
uid=0(root) gid=1000(ekhtor)
Como conclusión, sólo decir que aunque parezca poco efectivo debido a que debemos tener acceso como root primero, no penséis que hace falta acceso físico a una consola. Si por ejemplo entramos en una red y tenemos acceso total al sistema de ficheros, podemos guardar éste archivo compilado con permisos de root y cuando accedamos a la red física, poder tener acceso total al sistema cuando lo ejecutemos.


7 Respuestas to “Conseguir una shell de root”
Por elbatlles el 15 Ene, 2008 | Responder
una cosa, cuando intento compilar , me ocurre un error
shell.c:1:16: error: sys: No existe el fichero ó directorio
pk me ocurre?
Por ekhtor el 15 Ene, 2008 | Responder
El código en C que está en el post tienes que guardarlo en un fichero de texto que creas tu llamado shell.c.
Por eso te dice que el fichero no existe, porque no habrás creado el fichero con el código para compilarlo o no estarás posicionado en el directorio donde guardaste el archivo.
Espero que te haya solucionado la pregunta.
Por driews el 10 Feb, 2008 | Responder
No sería mejor añadirle el bit suid a sh en vez de a bash? asi no habria que andar compilando
un saludo
Por ekhtor el 10 Feb, 2008 | Responder
También es posible consegirlo de esa forma, pero en los sistemas restrictivos o enjauldos sólo tenemos a nuestra disposición(normalmente) la bash.
Por Raúl el 6 Mar, 2008 | Responder
Pero si se debe tener primero acceso como Root, ¿no hace inútil el proceso? Sería rebundante.
Por ekhtor el 6 Mar, 2008 | Responder
como explico sólo hace falta tener un archivo con bit de suid y permiso de escritura, que en caso de no existir hay que crearlo como root. Ese es el problema.
Espero haber resuelto tu duda Raúl.
Por Administrador Linux el 27 Abr, 2008 | Responder
Mucho más divertido es compilarlo en casa… llevártelo al equipo donde necesites ser root y ejecutarlo
Por cierto, para comprobar que ha funcionado, mejor que ejecutar el comando ‘id’ ¿qué tal un whoami?