Salt - Linux
Excelente que lo preguntes porque este comando tiene un propósito muy específico e importante.
Te explico detalladamente:
bashCopiarEditargrep '\$' /etc/shadow
🔎 ¿Qué hace este comando?
Busca en el archivo /etc/shadow todas las líneas que contienen el símbolo $.
¿Por qué se busca "$" en /etc/shadow?
-
En /etc/shadow se almacenan los hashes de las contraseñas de los usuarios en sistemas Linux.
-
Las contraseñas encriptadas (hashed) usan el símbolo $ para indicar el algoritmo que se usó para generar el hash.
Por ejemplo:
perlCopiarEditarusuario:$6$12345678$abcdefghijklmnopqrstuvwxyz:18146:0:99999:7:::El valor después del primer $ indica el tipo de algoritmo:
Algoritmo IdentificadorDES Ninguno (viejo y obsoleto, no usa $)
MD5 $1$
Blowfish $2a$, $2y$, $2b$
SHA-256 $5$
SHA-512 $6$
En la mayoría de sistemas modernos se usa $6$ → SHA-512, porque es más seguro.
📌 Entonces, en resumen:
✅ grep '$' /etc/shadow busca todas las líneas que contienen contraseñas encriptadas (las que tienen $).
✅ Filtra los usuarios que tienen contraseña (porque los que no tienen, aparecen sin nada o con un ! o *).
🚨 Importante: ¿por qué se escapa el símbolo "$" con \?
-
En grep, el símbolo $ es un carácter especial que significa "final de línea".
-
Para buscar el carácter literal $, se debe *escapar con * → \$
📚 Resumen técnico
Este comando se usa para:
-
Ver qué usuarios tienen contraseñas configuradas (hashes encriptados).
-
Detectar rápidamente líneas con contraseñas en el archivo /etc/shadow.
-
Saber qué tipo de algoritmo de hashing se está usando.
Explorar la salazón
El uso de sal es una forma de mejorar la solidez del hash como defensa contra ataques de fuerza bruta para descifrar contraseñas. Algunos sistemas operativos, como Linux, realizan automáticamente este proceso. En este ejercicio, verá la existencia de sales para las cuentas de usuario existentes. A continuación, creará hashes de contraseña con y sin sal. Finalmente, descifrará rápidamente la contraseña sin sal y verá cómo el descifrado de contraseñas con sal tarda mucho más.
Conéctese a la máquina virtual KALI y, si es necesario, inicie sesión como root usando Pa$$w0rd como contraseña.
Ya debería estar abierta una ventana de Terminal.
Introduzca cd ~ .
Este comando lo regresa al directorio de inicio del usuario root (es decir, /root).
Ingrese grep '\$' /etc/shadow .
Este comando muestra las líneas de entrada solo para aquellas cuentas que tienen un hash de contraseña almacenado.
Los sistemas Linux modernos utilizan hashes de contraseña con sal por defecto. El esquema de hashes predeterminado más común en Linux es yescrypt. Esto se confirma en la salida mediante la " y " entre los dos primeros signos de dólar. El valor " j9T " entre el segundo y el tercer signo de dólar son parámetros utilizados durante el proceso de hashes. El valor entre el tercer y el cuarto signo de dólar es la sal utilizada para generar el hash. El valor después del cuarto signo de dólar (hasta los dos puntos) es el hash de contraseña con sal.
Dado que los hashes generados por el algoritmo yescrypt son extremadamente difíciles de descifrar, genere sus propios hashes de contraseñas para descifrarlos. Introduzca:
openssl passwd -salt "" pass1 > hash.txtEste comando generará un hash MD5 de la contraseña pass1 sin utilizar sal y lo guardará en el archivo hash.txt .
Seleccione el botón Puntuación para validar esta tarea:
File /root/hash.txt exists and contains the password hash. Task completeIngrese cat hash.txt para ver el contenido del archivo.
Observe que no hay ningún valor entre el segundo y el tercer signo de dólar. Esto indica que el hash de la contraseña no está salificado.
La herramienta openssl genera hashes MD5 por defecto. Esto se codifica en la salida del hash con el valor 1 entre los dos primeros signos de dólar. Existen otras opciones de hashes de contraseña disponibles mediante parámetros. Por ejemplo, -5 usa SHA-256 y -6 usa SHA-512. Cada algoritmo de hash puede alterar la presentación del hash. Por ejemplo, los hashes MD5 no tienen parámetros; por lo tanto, su salida solo contiene el algoritmo, la sal y el hash.
Utilice John the Ripper para realizar un descifrado de contraseña por fuerza bruta contra el hash de contraseña sin sal ingresando:
john -incremental hash.txtJohn debería descifrar el hash de la contraseña sin sal en menos de 10 segundos.
Genere un hash de contraseña salado ingresando:
openssl passwd -salt SALT pass1 > salted-hash.txtUn valor de sal adecuado es una cadena aleatoria. Algunos algoritmos de hash admiten sales de hasta 512 bytes. Aquí se utiliza una sal preseleccionada de SALT para que sea muy evidente al visualizar la salida del hash.
Seleccione el botón Puntuación para validar esta tarea:
File /root/salted-hash.txt exists and contains the password hash. Task completeIngrese cat salted-hash.txt para ver el contenido del archivo.
Tenga en cuenta que el valor de sal de SALT está presente entre el segundo y el tercer signo de dólar.
Utilice John the Ripper para realizar un descifrado de contraseña por fuerza bruta contra el hash de contraseña con sal ingresando:
john -incremental salted-hash.txtJohn debería descifrar el hash de la contraseña con sal en menos de 10 segundos. La declaración hash completa de Linux se encuentra en el archivo salted-hash.txt. Por lo tanto, John recibe el valor de sal, lo que le permite descifrar la contraseña rápidamente.
Elimine el valor de sal del archivo ingresando:
cat salted-hash.txt | sed "s/SALT//g" > salt-secret-hash.txtSeleccione el botón Puntuación para validar esta tarea:
File /root/salt-secret-hash.txt exists and contains the password hash. Task completeUtilice John the Ripper para realizar un descifrado de contraseña por fuerza bruta contra el hash de contraseña con sal cuando no se conoce el valor de sal ingresando:
john -incremental salt-secret-hash.txtJohn tardará hasta 814.506.250 segundos (aproximadamente 25,8 años) en descifrar la contraseña con sal si desconoce el valor de la sal. Esto se debe a que el hash se genera a partir de 9 caracteres en lugar de los 5 de la contraseña original.
El conjunto de caracteres predeterminado que usa John the Ripper es la tabla estándar US-ASCII de 95 caracteres (es decir, mayúsculas, minúsculas, números y símbolos presentes en un teclado estadounidense estándar). Por lo tanto, con cuatro caracteres de sal (que podrían ser cualquiera de las opciones de 95 caracteres) y la contraseña original de cinco caracteres (es decir, pass1), que tardó 10 segundos (o menos) en descifrarse, el hash con sal de esa contraseña (con una sal de 4 caracteres) tardaría 10 segundos x 95 x 95 x 95 x 95 = 814.506.250 segundos.
Espere unos 10 segundos y luego presione la barra espaciadora para obtener un informe de estado de John. Espere 10 segundos más y vuelva a presionar la barra espaciadora. Puede repetir esto varias veces.
Observe el elemento de estado a la derecha. Este es el rango de contraseñas que se intentan al presionar la barra espaciadora para mostrar el mensaje de estado.
La salida de estado incluye: intentos exitosos (#g), tiempo transcurrido, intentos exitosos por segundo (#g/s), contraseñas candidatas probadas por segundo (#p/s), "criptas" (cálculos de hash de contraseña o cifrado) por segundo (#c/s), combinaciones de contraseña candidata y hash de destino por segundo (#C/s) y contraseñas candidatas actuales.
Presione CTRL+C para finalizar la operación de John.