El encargo de hoy es distinto. Los temas anteriores miraban una máquina por fuera: qué puertos,
qué versiones, qué publica la web. Hoy ya estás dentro: la Academia Faro te ha dado un shell
autorizado en su servidor de aulas (srv-aulas), con una cuenta normal y corriente (auditor),
sin privilegios. La pregunta del tema es: desde una cuenta así, ¿se puede llegar a root? Y si se
puede, ¿por dónde?
Eso es una escalada de privilegios. No es «entrar» —ya has entrado—, es pasar de una cuenta cualquiera a mandar en la máquina entera. La ventana va de las 18:00 a las 21:00, con las aulas cerradas, y la cláusula de este encargo es la más importante del tema: se demuestra y se para.
El shell autorizado y la enumeración
Dentro de una máquina no se dispara nada: se enumera. Mirar con calma qué cuenta eres, qué grupos tienes, qué puedes leer, qué programas hay con permisos especiales. La mayoría de las escaladas de verdad no son un exploit de película: son un descuido —una regla de más, un permiso mal puesto, una contraseña olvidada en un fichero— que la enumeración saca a la luz.
Lo bueno de enumerar a mano es que es silencioso: un sudo -l, un find, un cat no hacen
ruido en los registros. Lo que se oye es la enumeración automática (lo vemos al final).
Mirar qué deja sudo
Lo primero, casi siempre: preguntarle a sudo qué te deja hacer. sudo -l lista las reglas que
aplican a tu cuenta.
auditor@srv-aulas:~$ sudo -l Matching Defaults entries for auditor on srv-aulas: env_reset, mail_badpass, secure_path=/usr/sbin:/usr/bin:/sbin:/bin User auditor may run the following commands on srv-aulas: (ALL) NOPASSWD: ALL
Ahí está. (ALL) NOPASSWD: ALL quiere decir que esta cuenta puede ejecutar cualquier cosa como
root y sin contraseña. Es una regla que alguien dejó «para mantenimiento» y que convierte una
cuenta normal en administrador total. Es el camino directo a root, y el hallazgo crítico del
encargo.
La recomendación para el cliente: quitar esa regla (borrar su fichero de /etc/sudoers.d) y dar
por sudo solo las órdenes concretas que de verdad hagan falta, y con contraseña. Ponerle contraseña
a la cuenta pero dejar el NOPASSWD: ALL, cambiarlo por un NOPASSWD: /usr/bin/cat o esconder el
fichero con un nombre raro no cambia nada: la cuenta sigue siendo root.
Ejercicio
Qué deja hacer sudo
Entras con la cuenta «auditor», sin privilegios. Lo primero dentro de una máquina es ver qué puede tu cuenta: pregunta a sudo con «sudo -l». Si sale «NOPASSWD», puedes hacer eso como root sin contraseña.
Preparando la máquina…
Leer la flag y parar
Con esa regla, demostrar la escalada es un solo gesto. Un usuario normal no puede leer /root:
auditor@srv-aulas:~$ cat /root/root.txt cat: /root/root.txt: Permission denied
Pero con la regla de sudo, se lee como root:
auditor@srv-aulas:~$ sudo cat /root/root.txt SQ{sudo-abierto-…}
Ese SQ{…} es la flag: el marcador que solo se lee desde root. Pegarlo en el tablero demuestra
que llegaste a administrador. Y aquí está la cláusula del tema: se para ahí. No se abre un shell
de root (sudo -i), no se toca nada, no se deja nada detrás. El auditor demuestra que se puede y
lo documenta; lo que haría alguien con malas intenciones después —cambiar cosas, robar datos,
quedarse— no es parte del trabajo. Es el mismo gesto inerte de los temas anteriores: leer el
marcador y parar.
El SUID que se enumera y no se explota
Enumerando aparece otra cosa: un binario con el bit SUID. Un programa SUID se ejecuta siempre con el usuario de su dueño, no con el tuyo; si el dueño es root, ese programa corre como root. Se buscan así:
auditor@srv-aulas:~$ find / -perm -4000 -type f 2>/dev/null /usr/bin/sudo /usr/bin/passwd /usr/bin/mount /usr/local/bin/reparar-wifi
Los tres primeros son de serie (vienen con el sistema y son SUID a propósito). El último,
/usr/local/bin/reparar-wifi, no: alguien lo dejó SUID, y eso es una puerta de más —si ese
programa tiene un fallo, se convierte en root—. Es un hallazgo de gravedad alta —no se ha usado,
pero le basta un fallo en ese programa a quien llegue—, y la recomendación es quitarle el bit
(chmod u-s) si el programa no lo necesita, y revisar por qué lo tenía. Moverlo a otra carpeta
conservando el bit, o cambiarle el dueño en vez de quitárselo, deja la puerta igual.
Ejercicio
Los binarios SUID
Los binarios con el bit SUID se ejecutan como su dueño (root). En toda la máquina se buscan con «find / -perm -4000 -type f 2>/dev/null»; aquí, para no toparte con permisos denegados, basta mirar en /usr/local: «find /usr/local -perm -4000 -type f». /usr/local/bin/reparar-wifi no es de serie: es un hallazgo. Se documenta, no se explota.
Preparando la máquina…
Credenciales olvidadas
La enumeración también encuentra lo más humano: una contraseña escrita en un fichero. Un recordatorio
en el home, una clave en un script, un .bash_history con un mysql -p…. Aquí, un recordatorio
legible guarda la clave del router de las aulas. No da root por sí misma, pero una contraseña casi
nunca vale para una sola cosa: se apunta como hallazgo (gravedad media), se recomienda borrarla y
cambiarla, y para guardarlas, un gestor de secretos.
La enumeración automática
Todo esto —sudo, SUID, ficheros con claves, cron, el PATH— lo hace a mano quien tiene tiempo. Hay
herramientas que lo recorren automáticamente y dejan el mapa entero servido: la más conocida es
linpeas. Es cómoda, pero tiene su precio:
- Se oye. A diferencia de los comandos sueltos, una pasada de linpeas toca media máquina en segundos: deja un rastro enorme, y el SOC del cliente lo nota. En la sala, es lo único que sube el medidor de ruido.
- Lo deja todo a la vista. Que una cuenta normal pueda recorrer la máquina entera sin que nada la corte es, en sí, un hallazgo (de baja gravedad): media escalada está hecha para quien entre.
La recomendación para ese último hallazgo es vigilar y limitar lo que una cuenta normal puede
recorrer, y registrar los barridos raros, para que una enumeración no pase desapercibida.
Bloquear la herramienta por su nombre no sirve (se renombra en un minuto), y quitarle a la cuenta el
acceso a /usr/bin tampoco es la respuesta: lo que ayuda es verlo y limitarlo.
En la sala del tema
Estás en una sesión de auditor@srv-aulas, sin privilegios, de 18:00 a 21:00. El alcance es esa
máquina y esa cuenta: aquí no se barre ni hay otro equipo. En el puesto tienes la terminal (con
sudo, find, cat…) y, en el cajón, linpeas para la enumeración automática, para cuando
quieras ver —o el cliente te lo pida— qué saca; subirá el medidor de ruido, y con eso entenderás por
qué enumerar a mano era más discreto.
Cada hallazgo va al tablero con su evidencia —la salida de un comando o la flag—, su gravedad y su recomendación. Y la cláusula, siempre presente: se demuestra y se para. Al final entregas el informe y te llevas la nota en estrellas.