Suele ocurrir. Ahorita me preparaba para hacer unas prácticas en una máquina virtual con Debian e intentar explotar unas vulnerabilidades en la versión del kernel instalada. Inicié VirtualBox, cargó todo corréctamente y tenía en frente mío el prompt de login, intenté loguearme como root pero me decía que los datos eran inválidos… no recordaba la contraseña. Me dispuse a resetearla.

La información que expongo a continuación no es el método de explotación de ninguna vulnerabilidad, ni tampoco ninguna técnica de hacking. Simplemente es la demostración de como haciendo uso de un parametro de GRUB podremos conseguir acceso como root a un determinado sistema para realizar las tareas que necesitemos (en este caso, resetear la contraseña del usuario root).

Después de intentarme loguear con 10mil contraseñas diferentes posibles y no tener éxito reinicié la máquina virtual, quedando frente a GRUB:

Si leemos todo, vemos que en la parte de abajo nos dice que para editar los comandos antes de bootear alguna entrada simplemente presionamos la tecla e. Lo hacemos y ahora vemos los parametros pasados para el booteo del sistema. Editemos los que contiene la línea kernel. La seleccionamos y de nuevo presionamos e. Al final de la línea agregamos:

init=/bin/bash

Nota: En algunos casos puede que no se encuentre disponible bash, simplemente reemplaza por la shell usada (por ejemplo: /bin/sh).

Presionamos ENTER y con esto quedará modificada la línea. Básicamente lo que hace el parametro init es indicarle a GRUB que archivo se debe ejecutar después de terminar de cargar el kernel, en este caso ejecutamos la shell (/bin/bash).

Presionamos la tecla b para que bootee el sistema. Recuerda que la modificación que hemos hecho aquí NO es permanente, si quieres hacer un cambio permanente debes modificar diréctamente el archivo /boot/grub/menu.lst. Después de terminar de cargar el kernel quedamos ante una shell con permisos de root:

root-grub

Probablemente si intentamos modificar/crear algún archivo no podamos ya que no tenemos permisos de escritura. Debemos remontar la partición con permisos de lectura y escritura:

mount -n -o remount,rw /

Ahora tenemos dos opciones (en realidad muchas, pero con estas dos basta 🙂 ):

  1. Cambiar la contraseña de root
  2. Eliminar la contraseña de root

1. Cambiar la contraseña de root

Para hacerlo, simplemente ejecutamos el comando passwd, escribimos la nueva contraseña y la verificamos:

2. Eliminar la contraseña de root

  • Bastaría con editar el archivo /etc/shadow y modificar la primera línea (root) eliminando el contenido de los primeros dos puntos y los segundos
  • Guardamos el archivo y reiniciamos (lo más probable es que toque reiniciar físicamente) el sistema. Ahora verifiquemos que todo haya quedado bien 😛

¡Aleluya!

Al fin recuperamos el acceso a nuestra cuenta root 🙂

En un próximo artículo veremos como podemos protegernos de que este tipo de cosas sean realizadas sin nuestro consentimiento.

Enlaces