[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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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: php
$ sudo cat /etc/shadow- | grep usuario


Saludos.
- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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:

*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


~ 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.

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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 @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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!