Linux Privesc – Sudo

Linux Privesc – Sudo

Escalada de Privilegios en Linux Usando Derechos Sudo

Índice

Introducción

Hoy destripamos el método de “Escalada de privilegios en Linux usando el archivo sudoers”. Para la Escalada de privilegios siempre verificamos los permisos de root para cualquier usuario que pueda ejecutar cualquier archivo o comando mediante la ejecución del comando sudo -l.

¿Qué es el archivo sudoers?

En Linux/Unix, el archivo /etc/sudoers es el archivo de configuración para los derechos sudo y es donde se almacenan los usuarios y grupos con privilegios de root para ejecutar algunos o todos los comandos como root u otro usuario.

Cuando ejecutas cualquier comando junto con sudo, Linux verifica ese nombre de usuario en particular dentro del archivo sudoers y  no está, no puede ejecutar el comando o programa usando el comando sudo. Según los derechos sudo, el usuario root puede ejecutar desde TODOS los terminales, actuando como TODOS los usuarios: TODO el grupo, y ejecutar TODOS los comandos.

root ALL=(ALL:ALL) ALL

Sintaxis del Archivo Sudoers

Para otorgar derechos sudo a algún usuario en particular, se lanza el comando visudo que abrirá el archivo sudoers para su edición. Bajo la especificación de privilegios del usuario, observarás el permiso predeterminado de root root ALL=(ALL:ALL) ALL. Pero en realidad, también hay una opción de etiqueta disponible que es opcional, como se explica a continuación en la imagen.

Considera el ejemplo dado donde queremos asignar derechos sudo al usuario john para acceder al terminal y ejecutar el comando cp con privilegios de root. Aquí la etiqueta NOPASSWD significa que no se solicitará contraseña para el usuario.

NOTA:

  • (ALL:ALL) también puede representarse como (ALL).
  • Si encuentras (root) en lugar de (ALL:ALL), entonces denota que el usuario puede ejecutar el comando como root.
  • Si no se menciona nada para el usuario/grupo, entonces significa que sudo se predetermina al usuario root.

Método Tradicional para Asignar Privilegios de Root

Si el administrador del sistema desea dar TODOS los permisos al usuario john, puede seguir los siguientes pasos para agregar al usuario john bajo la categoría de Especificación de Privilegios de Usuario.

visudo
john ALL=(ALL:ALL) ALL
o
john ALL=(ALL) ALL

Obtener Acceso Root

Supongamos que iniciaste sesión con éxito en la máquina de la víctima a través de ssh y deseas conocer los derechos sudo para el usuario actual, entonces ejecuta el siguiente comando.

sudo -l

En el método tradicional, la opción PASSWD está habilitada para la autenticación del usuario al ejecutar el comando anterior y puede deshabilitarse usando la etiqueta NOPASSWD. El texto resaltado indica que el usuario actual está autorizado para ejecutar todos los comandos. Por lo tanto, hemos obtenido acceso root ejecutando el comando.

sudo su
id

Método por Defecto para Asignar Privilegios de Root

Si el administrador del sistema desea dar permiso de root al usuario john para ejecutar todos los comandos y programas, puede seguir los pasos a continuación para agregar al usuario john bajo la categoría de Especificación de Privilegios de Usuario.

visudo
john ALL=ALL
o
john ALL=(root) ALL

Aquí también la opción PASSWD por defecto está habilitada para la autenticación.

Obtener Acceso Root

Ejecuta el siguiente comando para ver la lista de usuarios sudo.

sudo -l

Aquí puedes percibir el texto resaltado que representa que el usuario john puede ejecutar todos los comandos como usuario root. Por lo tanto, podemos lograr acceso root realizando los siguientes pasos.

sudo su
o
sudo bash

Nota: Ambos métodos pedirán la contraseña del usuario para la autenticación al momento de ejecutar el comando sudo -l porque por defecto la opción PASSWD está habilitada.

Permitir Privilegios de Root a Comandos Binarios

A veces, el usuario tiene la autorización para ejecutar cualquier archivo o comando de un directorio particular, como /bin/cp, /bin/cat o /usr/bin/find. Este tipo de permisos pueden llevar a la escalada de privilegios para obtener acceso root y se pueden implementar con los siguientes pasos.

john ALL=(root) NOPASSWD: /usr/bin/find

NOTA: Aquí la etiqueta NOPASSWD significa que no se solicitará contraseña para la autenticación al ejecutar el comando sudo -l.

Obtener Acceso Root usando el Comando Find

Nuevamente compromete el sistema de la víctima y luego pasa a la fase de escalada de privilegios y ejecuta el siguiente comando para ver la lista de usuarios sudo.

sudo -l

En este punto, puedes notar que el texto resaltado indica que el usuario john puede ejecutar el comando find como root. Por lo tanto, logramos acceso root ejecutando los siguientes pasos:

sudo find /home -exec /bin/bash \; -quit
o
sudo find /home -exec /bin/sh \; -quit

Permitir Privilegios de Root a Programas Binarios

Este tipo de permisos pueden llevar a la escalada de privilegios para obtener acceso root. Puede implementar el siguiente paso para permitir privilegios de root en programas binarios.

john ALL=(root) NOPASSWD: /usr/bin/perl

NOTA: Aquí la etiqueta NOPASSWD significa que no se solicitará contraseña para la autenticación al ejecutar el comando sudo -l.

Obtener Acceso Root usando Perl

Nuevamente compromete el sistema de la víctima y luego pasa a la fase de escalada de privilegios y ejecuta el siguiente comando para ver la lista de usuarios sudo.

sudo -l

En este punto, puedes notar que el texto resaltado indica que el usuario john puede ejecutar el comando perl como root. Por lo tanto, logramos acceso root ejecutando los siguientes pasos:

sudo perl -e 'exec "/bin/bash";'
o
sudo perl -e 'exec "/bin/sh";'

Permitir Privilegios de Root a Scripts

Los scripts también pueden ser utilizados para la escalada de privilegios. Puede implementar el siguiente paso para permitir privilegios de root en scripts específicos.

john ALL=(root) NOPASSWD: /path/to/script.sh

NOTA: Aquí la etiqueta NOPASSWD significa que no se solicitará contraseña para la autenticación al ejecutar el comando sudo -l.

Obtener Acceso Root usando un Script

Nuevamente compromete el sistema de la víctima y luego pasa a la fase de escalada de privilegios y ejecuta el siguiente comando para ver la lista de usuarios sudo.

sudo -l

En este punto, puedes notar que el texto resaltado indica que el usuario john puede ejecutar el script /path/to/script.sh como root. Por lo tanto, logramos acceso root ejecutando el siguiente comando:

sudo /path/to/script.sh

Permitir Derechos Sudo a Otros Programas

El administrador del sistema también puede permitir derechos sudo a otros programas. Aquí hay un ejemplo para permitir derechos sudo al comando nano para el usuario john.

john  ALL=(root) NOPASSWD: /usr/bin/nano

NOTA: Aquí la etiqueta NOPASSWD significa que no se solicitará contraseña para la autenticación al ejecutar el comando sudo -l.

Obtener Acceso Root usando el Comando Nano

Nuevamente compromete el sistema de la víctima y luego pasa a la fase de escalada de privilegios y ejecuta el siguiente comando para ver la lista de usuarios sudo.

sudo -l

En este punto, puedes notar que el texto resaltado indica que el usuario john puede ejecutar el comando nano como root. Por lo tanto, logramos acceso root ejecutando el siguiente comando:

sudo nano /etc/passwd
No hay etiquetas para esta entrada.