Escalada de Privilegios en Linux Usando Derechos Sudo
Índice
- Introducción
- Concepto Teórico
- Sintaxis del Archivo Sudoers
- Método Tradicional para Asignar Privilegios de Root
- Método por Defecto para Asignar Privilegios de Root
- Permitir Privilegios de Root a Comandos Binarios
- Permitir Privilegios de Root a Programas Binarios
- Permitir Privilegios de Root a Scripts
- Permitir Derechos Sudo a Otros Programas
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.