[SOLUCIONADO] Hash de contraseñas en Kali.

Iniciado por MathCommander, Agosto 02, 2020, 03:49:02 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 02, 2020, 03:49:02 PM Ultima modificación: Agosto 05, 2020, 12:42:15 AM por DtxdF
Hola. Mi duda es bastante sencilla, ¿Como puedo averiguar la función hash que utiliza mi distribución de linux para hashear contraseñas? En el fichero /etc/shadow aparece la contraseña asociada a mi usuario pero hasheada y me gustaría saber que hash está utilizando mi distribución, que es Kali Linux 2020.1.

He probado a hashear mi contraseña original (la que meto para iniciar sesión) mediante QuickHash con varias funciones de hash distintas y ninguna me devuelve el hash que aparece en el fichero /etc/shadow.

Gracias, un saludo.

Agosto 02, 2020, 05:32:31 PM #1 Ultima modificación: Agosto 02, 2020, 05:34:53 PM por WHK
Kali está basado en ubuntu asi que realmente no utiliza shadow, usa shadow2. Dale un vistazo a este artículo, explica muy bien sobre como detectar el tipo de hashing: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Citar$1$ is MD5
    $2a$ is Blowfish
    $2y$ is Blowfish
    $5$ is SHA-256
    $6$ is SHA-512

En el caso de Kali debiera utilizar SHA-512. Lo puedes sacar con:

Código: text
$ sudo cat /etc/shadow- | grep usuario


Saludos.
- You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login - You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Agosto 02, 2020, 06:33:06 PM #2 Ultima modificación: Agosto 02, 2020, 06:36:32 PM por MathCommander
Gracias por el artículo, soluciona mi duda con respecto a saber que hash se ha utilizado. En efecto el primer hash que probé fue SHA-512, y aun así no coincidían el que obtenía de manera manual y el que aparecía en /etc/passwd. Para mostrarte un caso concreto he cambiado mi contraseña a holahola.

Si voy al fichero /etc/passwd el campo destinado a almacenar la contraseña contiene lo siguiente

$6$.63oZj8Hf87vZAnT$yBeieSF4sVMTL6ndq2MJF1S1gLdQjs5VDacSgLJTAzi/ZEcOgp9nkNSGa0qdrTgUqY231zx.sh88QkRZ3r/VW0

lo cuál indicaría que se ha utilizado SHA-512 para hashear la contraseña holahola y que el hash de la contraseña es

.63oZj8Hf87vZAnT$yBeieSF4sVMTL6ndq2MJF1S1gLdQjs5VDacSgLJTAzi/ZEcOgp9nkNSGa0qdrTgUqY231zx.sh88QkRZ3r/VW0

Sin embargo si meto la contraseña holahola en QuickHash para calcular su hash SHA-512 el resultado que obtengo es

8984264870D10BD7D1456AFA517587BCB9D538F537F5ED9A89118AA02BA61E821F908DBA588C61D4F798734737CBDA3577649B528BEB9FEA600CC2DCB8A2502D

Es fácil ver que no coinciden, ni siquiera en longitud. ¿En qué me estoy equivocando?

Gracias, un saludo.

Puedes usar la función 'crypt(...)'...

Según el manual (man 3 crypt):

Citarcrypt () es la función de cifrado de contraseña. Se basa en el algoritmo estándar de cifrado de datos con variaciones destinadas (entre otras cosas) a desalentar el uso de implementaciones de hardware de una búsqueda clave.

salt significa:

Citarsalt es una cadena de dos caracteres elegida del conjunto [ a - zA - Z0 - 9. / ]. Esta cadena se utiliza para perturbar el algoritmo en 4096 formas diferentes.

En base a ello, y para facilitar las cosas, puedes usar crypt(...) directamente en Python:

Código: python
import crypt

# SHA512
type = '6'
# El «salt»
salt = '.63oZj8Hf87vZAnT'
# La cadena a hashear
word = 'holahola'

print(crypt.crypt(word, '$%s$%s$' % (type, salt)))


El resultado sería:

Código: bash
python3 script.py
$6$.63oZj8Hf87vZAnT$yBeieSF4sVMTL6ndq2MJF1S1gLdQjs5VDacSgLJTAzi/ZEcOgp9nkNSGa0qdrTgUqY231zx.sh88QkRZ3r/VW0


La razón por la que no te generaba igual es que se usaba directamente la función sha512 sin derivaciones. Para ilustrar mejor lo que digo:

Código: python
import hashlib

string = b'holahola'

print(hashlib.sha512(string).hexdigest())


El resultado sería:

Código: bash
python3 script.py
8984264870d10bd7d1456afa517587bcb9d538f537f5ed9a89118aa02ba61e821f908dba588c61d4f798734737cbda3577649b528beb9fea600cc2dcb8a2502d


Te podría interesar:

*- You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
*- You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
*- You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Vale, comprendo entonces por qué no me cuadran ambos resultados. Sin embargo, teniendo en cuenta lo que acabas de decir, me surgen dos dudas más:

1. Has dicho que el salt está compuesto de dos caracteres, ¿Por qué luego en el ejemplo utilizas un salt = '.63oZj8Hf87vZAnT'? Ese salt tiene más de 2 caracteres.

2. ¿Cómo has sabido cuál era el salt utilizado para producir el hash correcto? Podría haber sido cualquier otro salt distinto.

Gracias, un saludo.

@You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

No amigo, nunca dije que podrían ser dos caracteres, cité el manual de crypt(...) según las partes de interés. Como por ejemplo esta:

Citarsalt es una cadena de dos caracteres elegida del conjunto [a- zA-Z0-9./]. Esta cadena se utiliza para perturbar el algoritmo en 4096 formas diferentes.

Lo que significa que se pueden usar caracteres en el salt que estén en el rango de la a a la z (incluyendo mayúsculas) y números a partir del 1 al 9 sumando los caracteres . (punto), / (barra diagonal).

Puede leerlo usando el comando: man 3 crypt

Como lo menciona nuestro compañero @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login en los tipos de hashing en el fichero que está leyendo, puede ver que su hash es el tipo '6' que corresponde a la función SHA-512, sin embargo crypt(...) hace mucho más que eso, entre ello están las derivaciones, entre otras cosas.

Mire lo que está en negrita: $6$.63oZj8Hf87vZAnT$yBeieSF4sVMTL6ndq2MJF1S1gLdQjs5VDacSgLJTAzi/ZEcOgp9nkNSGa0qdrTgUqY231zx.sh88QkRZ3r/VW0

Amarillo: La función que se usó
Rojo: El salt
Verde: El hash

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Cierto! No me había dado cuenta de que el salt venía en la linea correspondiente del passwd. Ya si que me ha quedado claro.

Muchas gracias a todos por vuestras respuestas. Un saludo!