Linux Privilege Escalation

Automated Enumeration Tools


Abusing sudoers privileges

Nginx

El siguiente repositorio nos proporciona el siguiente script para crear una configuración en Nginx maliciosa. El siguiente script realizará una configuración de Nginx que habilite una página web por el puerto 1338. Se indicará que el servidor tenga capacidad para realizar un listado de directorios (directory listing) en el directorio raíz (/), dado que el usuario que ejecuta Nginx es root. Esto nos permitirá listar los archivos del sistema sin restricciones.

Además, se habilitará el método PUT para que se puedan subir contenidos a través de la página web vulnerable que estamos montando. Una vez configurado, cargaremos la configuración del sitio web vulnerable.

Le daremos permisos de ejecución al script realizado y a ejecutarlo para levantar el sitio web vulnerable.

Accederemos al sitio web vulnerable http://<VICTIM_IP>:1338 y verificaremos que disponemos del acceso a listar los directorios del equipo desde la raíz /.

Al verificar esto, si el servicio de SSH se encuentra expuesto, el objetivo será crear en nuestra máquina atacante una clave pública que subiremos a través del método PUT al servidor web vulnerable en la ruta /root/.ssh/authorized_keys.

Mostraremos el contenido de la clave pública id_rsa.pubque hemos generado en nuestra máquina y a través de la herramienta cURL subiremos este contenido dentro del archivo authorized_keys, esto con el objetivo de que nuestra clave pública se encuentre permitida en la máquina pública y nos podamos conectar como usuario root sin proporcionar credenciales.

Procederemos a conectarnos mediante SSH con el usuario root en la máquina víctima. En este ejemplo, la IP de la máquina víctima es 10.10.10.10.


Mosh-server

Al revisar si el usuario que disponemos tiene algún privilegio de sudoers, nos encontramos que puede ejecutar como usuarioroot el binario /usr/bin/mosh-server.

Mosh, el acrónimo de Mobile Shell, es una aplicación (en linea de comandos) que es usada para conectarse a un servidor desde un ordenador o dispositivo cliente, a traves de la red. Puede usarse como SSH y contiene algunas características adicionales al SSH. Es una aplicación escrita por Keith Winstein, para sistemas UNIX, bajo licencia GNU GPL v3.

Al ejecutar el servidor Mosh como root, ahora el usuario hackertiene una shell con permisos de root. Esto permite al atacante acceder a todos los recursos del sistema con permisos completos, incluyendo la capacidad de modificar archivos, instalar software, y ejecutar comandos con total libertad.

Básicamente, lo que realizamos es montar un servidor Mosh con privilegios de root en el localhost, para así lograr obtener acceso como usuario root.


PrusaSlicer

En este ejemplo, el usuario llamado hacker dispone del privilegio sudoers sobre el binario de PrusaSlicer que en este caso se encuentra instalado en /opt/PrusaSlicer/prusaslicer.

PrusaSlicer es el software de corte para impresoras 3D de Prusa . Básicamente, "corta" un objeto 3D en capas finas y un conjunto de instrucciones que la impresora 3D puede seguir para imprimir el modelo.

Nos descargaremos el siguiente proyecto de GitHub en nuestro equipo atacante.

Editaremos el archivo exploit.sh para establecer nuestra dirección IP de atacante y el puerto desde donde estaremos en escucha. Levantaremos un servidor web para transferir estos archivos al equipo víctima.

Desde el equipo víctima, nos descargaremos los archivos exploit.sh y evil.3mf. En nuestro caso la dirección IP de atacante es la 10.10.16.5.

Desde una terminal de nuestro equipo, nos pondremos en escucha por el puerto especificado en el payload para recibir la Reverse Shell.

Realizaremos la explotación para abusar de este permiso de sudoers del binario.

Revisamos que hemos logrado obtener acceso al equipo como usuario root, ya que es quien lo ha ejecutado al disponer de permisos de sudo sobre el binario indicado que ha sido aprovechado para ejecutar la Reverse Shell.


iptables && iptables-save

En el siguiente blog, se especifica como podemos abusar de este privilegio de sudoers. Además de un PoC sencillo.

Opción 1 --> sobreescribir /etc/passwd para añadir nuevo usuario root

En el PoC del blog mencionado, se nos informa que disponiendo de ambos permisos de sudoers, podemos intentar sobreescribir el archivo /etc/passwd para añadir una nueva entrada de un nuevo usuario root con una contraseña asignada por nosotros mismos.

En este caso, lo que realizaremos es copiar la entrada de nuestro /etc/passwd para tener la estructura de lo que deberemos añadir en el archivo de la máquina víctima.

Una vez tengamos la entrada de plantilla, lo que deberemos realizar es crear una contraseña en el formato de OpenSSL. Deberemos de reemplazar el valor x por el de la contraseña generada, para lograr obtener el siguiente resultado --> root:$1$Gow86CXS$sHAPSqpiT4xePLCPO147m1:0:0:root:/root:/bin/bash

Inyectaremos la entrada rootfalsificada en un nuevo comentario de regla de e, verificaremos que se encuentra añadida esta línea en las reglas de iptables y sobreescribiremos el archivo /etc/passwd para añadir esta nueva entrada del usuario root. Verificaremos si podemos acceder con este nuevo usuario root y la contraseña asignada.

Opción 2 --> sobreescribir /root/.ssh/authorized_keys para añadir nuestra clave pública SSH

Buscando otras maneras de aprovecharnos de estos privilegios de sudoers, pensamos en subir nuestra clave pública SSH al archivo authorized_keys del usuario root. En un principio no deberíamos tener problemas al ejecutar el iptables && iptables-save con permisos de sudo.

Generaremos una nueva clave pública SSH en nuestro equipo atacante.

Copiaremos nuestra clave SSH pública .

Volveremos a realizar el PrivEsc aprovechándonos de estos permisos de sudoers. En este caso, crearemos un nuevo comentario que contenga nuestra clave SSH pública. Revisaremos que nos aparece el comentario en las reglas de iptables, y sobreescribiremos el archivo mencionado.

Al intentar acceder mediante SSH con el usuario root, comprobamos que no se solicita credenciales. Al subir nuestra clave pública SSH al archivo /root/.ssh/authorized_keys, logramos conectarnos sin necesidad de proporcionar una contraseña, ya que la clave pública almacenada en ese archivo se comunica directamente con nuestra clave privada.


BBOT (BIGHUGE BLS OSINT TOOL)

Leer archivos privilegiados del sistema (LFI)

Obtener ejecución de comandos (RCE)

Manual

Última actualización

¿Te fue útil?