Autenticación en Linux y Crackeo de Hashes
Las distribuciones Linux 🐧 soportan varios mecanismos de autenticación. Uno de los más comunes es PAM (Pluggable Authentication Modules).
Estos módulos controlan:
-
👤 Información de usuarios
-
🔐 Autenticación
-
📂 Sesiones
-
🔄 Cambios de contraseña
Ejemplos de módulos: pam_unix.so, pam_unix2.so
Ubicación típica en Debian: /usr/lib/x86_64-linux-gnu/security/
👉 Cuando un usuario cambia su contraseña con passwd, PAM gestiona cómo se guarda y actualiza de forma segura.
📂 Archivo /etc/passwd
Contiene información básica de cada usuario. Es legible por todos los usuarios del sistema.
Cada línea tiene 7 campos separados por :.
Ejemplo:
unai:x:1000:1000:,,,:/home/unai:/bin/bash
| Campo | Valor |
|---|---|
| 👤 Usuario | unai |
| 🔑 Contraseña | x |
| 🆔 UID | 1000 |
| 👥 GID | 1000 |
| 📝 GECOS | ,,, |
| 🏠 Home | /home/unai |
| 🖥️ Shell | /bin/bash |
👉 El campo contraseña puede contener:
-
x→ la contraseña está en/etc/shadow -
Hash (en sistemas muy antiguos)
-
::→ ⚠️ significa que no se pedirá contraseña (riesgo total).
Ejemplo peligroso:
root::0:0:root:/root:/bin/bash
Esto permitiría iniciar sesión como root sin contraseña. 🚨
📂 Archivo /etc/shadow
Aquí se almacenan los hashes de contraseñas 🔐 (solo accesible por root).
Formato de ejemplo:
unai:$y$j9T$3QSBB6CbHEu...SNIP...f8Ms:18955:0:99999:7:::
| Campo | Valor |
|---|---|
| 👤 Usuario | unai |
| 🔑 Contraseña | |
| 📅 Último cambio | 18955 |
| 🔒 Edad mínima | 0 |
| ⏳ Edad máxima | 99999 |
| ⚠️ Advertencia | 7 |
| 🚫 Inactividad | - |
| ⏰ Expiración | - |
Los hashes siguen el formato:
$id$salt$hash
📌 Ejemplos de algoritmos usados:
-
1→ MD5 -
5→ SHA-256 -
6→ SHA-512 -
y→ yescrypt (el más usado hoy en día en Debian)
📂 Archivo /etc/security/opasswd
Guarda contraseñas antiguas 🔄 (para que un usuario no las reutilice).
Solo root puede leerlo.
Ejemplo:
unai:1000:2:$1$HjFAfYTG$qNDkF0zJ3v8y,$1$kcUjWZJX$E9uMSmiQeRh4
📌 Aquí vemos que se usó MD5 (
🔓 Crackeo de credenciales en Linux
Si tenemos acceso root, podemos combinar los archivos /etc/passwd y /etc/shadow con unshadow, y después crackear con John the Ripper o Hashcat 💥.
Ejemplo:
sudo cp /etc/passwd /tmp/passwd.bak
sudo cp /etc/shadow /tmp/shadow.bak
unshadow /tmp/passwd.bak /tmp/shadow.bak > /tmp/unshadowed.hashes
Ahora crackeamos:
hashcat -m 1800 -a 0 /tmp/unshadowed.hashes rockyou.txt -o /tmp/unshadowed.cracked
⚡ Esto nos revelará las contraseñas en texto plano si el diccionario tiene éxito.