Nuestros programadores estrellas agotaron sus provisiones de café, por su búsqueda a tiempo completo por la respuesta, hasta que Fabián halló la contestación en GitHub así que hoy la compartimos con nosotros.
Solución:
Las contraseñas normalmente se almacenan en /etc/shadow
, que no es legible por los usuarios. Sin embargo, históricamente, se almacenaron en el archivo de lectura mundial /etc/passwd
junto con toda la información de la cuenta. Para compatibilidad con versiones anteriores, si hay un hash de contraseña en la segunda columna de /etc/passwd
tiene prioridad sobre el de /etc/shadow
.
Históricamente, un segundo campo vacío en /etc/passwd
significa que la cuenta no tiene contraseña, es decir, cualquiera puede iniciar sesión sin una contraseña (utilizado para cuentas de invitados). Esto a veces está deshabilitado. Si las cuentas sin contraseña están deshabilitadas, puede poner el hash de una contraseña de su elección. Puedes usar el crypt
función para generar hash de contraseña, por ejemplo perl -le 'print crypt("foo", "aa")'
para establecer la contraseña para foo
.
Es posible obtener acceso a la raíz incluso si solo puede agregar a /etc/passwd
y no sobrescribir el contenido. Esto se debe a que es posible tener varias entradas para el mismo usuario, siempre que tengan nombres diferentes: los usuarios se identifican por su ID, no por su nombre, y la característica definitoria de la cuenta raíz no es su nombre sino el hecho de que tiene ID de usuario 0. Por lo tanto, puede crear una cuenta raíz alternativa agregando una línea que declara una cuenta con otro nombre, una contraseña de su elección y una ID de usuario 0.
Sólo tipo:
echo root::0:0:root:/root:/bin/bash > /etc/passwd
su
y tu eres root.
(Quitando x
significa que root ya no requiere contraseña, puede usar sed
comando en lugar de echo
sin embargo, esto es suficiente para obtener root shell)
Puedes usar este método no destructivo:
# to generate hash of the password
openssl passwd mrcake
hKLD3431415ZE
# to create a second root user with "mrcake" password
echo "root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash" >> /etc/passwd
# to switch to a root2
su root2
Password: mrcake
Recuerda que puedes optar por la opción de decir si diste con el hallazgo.