Underc0de - La Casa de los Informáticos

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: MathCommander en Agosto 02, 2020, 03:49:02 PM

Título: [SOLUCIONADO] Hash de contraseñas en Kali.
Publicado por: MathCommander en Agosto 02, 2020, 03:49:02 PM
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.
Título: Re:Hash de contraseñas en Kali.
Publicado por: WHK en Agosto 02, 2020, 05:32:31 PM
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: https://www.cyberciti.biz/faq/understanding-etcshadow-file/

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:

$ sudo cat /etc/shadow- | grep usuario

Saludos.
Título: Re:Hash de contraseñas en Kali.
Publicado por: MathCommander en Agosto 02, 2020, 06:33:06 PM
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.
Título: Re:Hash de contraseñas en Kali.
Publicado por: DtxdF en Agosto 02, 2020, 07:28:06 PM
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) [Seleccionar]
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) [Seleccionar]
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) [Seleccionar]
import hashlib

string = b'holahola'

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


El resultado sería:

Código (bash) [Seleccionar]
python3 script.py
8984264870d10bd7d1456afa517587bcb9d538f537f5ed9a89118aa02ba61e821f908dba588c61d4f798734737cbda3577649b528beb9fea600cc2dcb8a2502d


Te podría interesar:

*- es.wikipedia.org/wiki/Secure_Hash_Algorithm
*- docs.python.org/3/library/hashlib.html
*- docs.python.org/3/library/crypt.html


~ DtxdF
Título: Re:Hash de contraseñas en Kali.
Publicado por: MathCommander en Agosto 04, 2020, 04:53:37 PM
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.
Título: Re:Hash de contraseñas en Kali.
Publicado por: DtxdF en Agosto 04, 2020, 06:11:13 PM
@MathCommander (https://underc0de.org/foro/index.php?action=profile;u=110902)

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 @WHK (https://underc0de.org/foro/index.php?action=profile;u=20051) 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
Título: Re:Hash de contraseñas en Kali.
Publicado por: MathCommander en Agosto 04, 2020, 10:21:24 PM
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!