¿Qué es la escalación de privilegios?
Es muy probable que la mayoría de las veces que obtengamos acceso a un sistema objetivo, nuestra entrada no sea con privilegios de administrador. Lo que implica que debemos probar formas de adquirir esos permisos para poder simular a un atacante que pone en compromiso al sistema.
A expensas de la practicidad de este articulo, vamos a suponer que el sistema en cuestión ya ha sido comprometido.
En este caso, gracias a la plataforma TryHackMe, hemos accedido a un sistema linux.
Existe una herramienta llamada Linux Enumeration, que se puede encontrar AQUI.
Este script nos permite listar información de todo tipo sobre el sistema donde hemos accedido.
Aqui vemos que nos lista especificaciones del SO.
Nos otorga la lista de grupos y sus miembros.
Los usuarios que han usado SUDO recientemente, la lista de permisos en el directorio /home
Los procesos que están corriendo y sus respectivos dueños.
Explotando archivos SUID y GUID.
La idea de este tipo de escalación es encontrar archivos de permisos SUID o GUID e intentar ejectutarlos con los permisos del dueño, en este caso, buscaremos que el dueño sea un superusuario (o sea root).
Tenemos aquí la lista de archivs SUID, SGID y un detalle de Linux Enumeration que nos otorga un posible archivo interesante.
Podemos listar los archivos SUID con el comando de arriba, que nos permitirá buscar en todo el sistema, este tipo de archivos.
Podemos ver que somos el usuario 3 y que, en /home/user3/ disponemos de un archivo llamado shell.
Es el mismo archivo que nos recomendaba Linux Enumeration.
¿Qué pasa si lo corremos?
¡Claro! Al ejecutar dicho archivo, obtenemos privilegios de administrador. Ahora somos root.
EDITAR /etc/passwd
La idea aquí es bastante simple, si tenemos un usuario con acceso de escritura al archivo /etc/passwd, que es donde se alojan los usuarios y su información sensible, podemos crear uno nuevo y utilizarlo para vulnerar el sistema.
Estamos ahora con el User7, y como vimos más arriba sabemos que tiene acceso al archivo /etc/passwd para escribirlo.
Nos creamos una contraseña dentro del sistema utilizando ese comando.
Editamos el archivo /etc/passwd y nos colocamos privilegios de root. (Basta con copiar los datos luego de los dos :0:0: del usuario root del mismo archivo).
Somos, entonces, root.
Malas configuraciones de binarios y archivos GTFO
Estos tipos de archivos de Unix pueden estar mal configurados y darnos acceso, mediante algunos programas, a privilegios de administrador.
Estamos ahora dentro del usuario User8.
Podemos listar con "sudo -l" los comandos que puede ejecutar con privilegios de administrador sin necesidad de la clave.
En este caso vemos que puede ejecutar el editor de texto Vi.
Ejecutamos vi (con sudo vi).
Se nos abre la pantalla principal del programa. Es importante notar el detalle que, debajo, eleditor Vi nos permite interactuar con el para cambiar los modos, grabar archivos, etc.
En esa linea de comandos podemos colocar lo siguiente:
:!sh
Y apretar enter.
Se nos abre una shell, no muy bella pero util.
Colocamos el comando whoami y nos damos cuenta que somos root.
Explotar Crontab
Antes que nada ¿Qué es Cron? Cron es un daemon de Linux que nos permite programar tareas cada intervalos regulares. Por ejemplo podemos programar un backup, la ejecución de un programa, etc.
Con ayuda de msfvenom podemos crear la siguiente shell, consiste en un archivo que nos permitira crear una shell reversa en el sistema objetivo. Debemos copiar la linea que aparece al final.
Ahora en el user4 podemos ver que ejecuta un archivo llamado autoscript.sh, como hemos visto en la enumeración, este script se ejecuta con privilegios de administrador pero el usuario no puede ejecutarlo. Sabemos, tambien (y por eso estamos realizando este exploit) que crontab lo ejecuta cada 5 minutos.
Reemplazamos el contenido de autoscript.sh con nuestra shell reversa.
Abrimos en nuestra maquina atacante una conexion netcat que escuche en el puerto 8888 (recordemos que en la shell especificamos NUESTRA IP y el puerto a enviar la información).
Ahora solo nos queda esperar a que Cron ejecute el script.
Nos hemos conectado y somos root.
Escribir en la variable PATH
La variable Path almacena el nombre del comando que ejecutamos y su respectivo binario.
Podemos intentar buscar comandos que se ejecuten como administrador (como habiamos hecho con los binarios SUID) pero alterando directamente la variable PATH.
Veamos un ejemplo más claro.
Aca el usuario user5 ejecuta un script llamado script que realiza la misma función que ls (lista el contenido de un directorio.
En /tmp podemos crear un archivo que se llama ls y que ejecute una shell (/bin/bash).
La hacemos ejecutable y la enviamos a una variable path.
Ahora cuando ejecutamos el script en el escritorio, el comando ls asociado se ejecuta en la variable que le marcamos y nos abre una consola de comandos.
En este caso una consola con privilegios.
Este es un pantallazo general a la escalación de privilegios en sistemas Linux.
NOTA: Todas estas pruebas fueron realizado en la página TryHackMe, un sitio que ofrece entornos controlados para practicar pentesting..
Estos procedimientos no deben realizarse a equipos ajenos sin una previa autorización.