# SMB RELAY

## INTRODUCCIÓN

{% hint style="info" %}
Este ataque está relacionado a las [malas prácticas](https://ajcruz15.gitbook.io/red-team/active-directory-hacking/creando-un-laboratorio-de-ad/3.-misconfiguraciones-importantes):

* **1. Generar recurso compartido SMB**
* **2. Desactivar el Firewall de Windows**
* **3. Desactivar las protecciones del Antivirus de Windows Defender**
* **4. Crear usuario Administrador con Password Temporal**
* **7. Convertir un usuario en Administrador local de los clientes**
  {% endhint %}

### Esquema de trabajo

Vamos a explotar el siguiente esquema:

En los entornos empresariales existen actividades programadas que comprueban los recursos compartidos para ver si siguen existiendo. Esto hace que en muchas ocasiones, un equipo (normalmente con un administrador local detrás) se trate de conectar a muchos recursos compartidos que no existen a lo largo del día. Teniendo esto en cuenta, este ataque consiste en lo siguiente:

1. El equipo víctima le preguntará al DC, ‘Oye, me dejas conectarme a \archivos?’&#x20;
2. El DC le responderá, ‘pues no tengo ni idea de lo que me estás hablando’&#x20;
3. El equipo víctima preguntará por tanto a nivel de red, '¿alguno sabe cómo me puedo conectar a \archivos?'&#x20;
4. El equipo del atacante responderá y le dirá ‘Yo, envíame tu Hash y te conectaré al recurso’&#x20;
5. El equipo víctima responderá ‘Okey, pues ahí te envío mi Hash’

### Herramientas necesarias

#### Responder

Es un envenenador de tráfico que se puede aplicar a una gran variedad de protocolos.

{% embed url="<https://github.com/SpiderLabs/Responder>" %}

#### CrackMapExec

Es una herramienta de post-explotación que se aprovecha de protocolos y características propias de los entornos de Directorio Activo para obtener una gran cantidad de información sobre los mismos.

Utiliza **Impacket** y **Powersploit Toolkit**

{% embed url="<https://github.com/byt3bl33d3r/CrackMapExec>" %}

#### **Impacket**

Es una colección de clases de Python para trabajar con protocolos de red. Está pensada para obtener control a bajo nivel de los paquetes utilizados por algunos protocolos y, en algunos casos como SMBv1, la propia implementación del protocolo en sí mismo.

{% embed url="<https://github.com/SecureAuthCorp/impacket>" %}

#### PowerSploit Toolkit

Es una colección de scripts de Powershell orientados a ayudar a pentesters en su proceso. Éste repositorio se encuentra deprecated.

{% embed url="<https://github.com/PowerShellMafia/PowerSploit>" %}

#### John the Ripper

Es un crackeador de Hashes que se caracteríza por su velocidad y versatilidad.

{% embed url="<https://github.com/openwall/john>" %}

#### RPCClient

Herramienta para ejecutar el cliente de MS-RPC. Viene instalada por defecto en Linux.

{% embed url="<https://web.mit.edu/darwin/src/modules/samba/docs/htmldocs/rpcclient.1.html>" %}

#### PTH-WinExe

Una aplicación que forma parte de la suite PTH-Toolkit y que permite ejecutar comandos en Windows realizando la técnica de PassTheHash.

{% embed url="<https://github.com/byt3bl33d3r/pth-toolkit>" %}

### Resumen

* Vamos a utilizar responder para envenenar paquetes smb y así obtener el hash NetNTLM-v2.
* Este Hash lo vamos a crackear con john.
* Comprobaremos con CrackMapExec sí esta contraseña es correcta
* Entenderemos por qué o por qué no tenemos capacidad de obtener una shell interactiva.
* Utilizaremos Impacket-psexec para obtener una shell interactiva.
* Aprovecharemos las ventajas que nos brinda este acceso.

## EXPLOIT

### 1. Envenenar paquetes SMB

El repeater se encuentra configurado por defecto para envenenar paquetes SMB, por lo tanto, vamos a comprobar que el archivo de configuración del repeater está por defecto (Todo ON):

```
head -n 20 /usr/share/responder/Responder.conf

[Responder Core]

; Servers to start
SQL = On
SMB = On
RDP = On
Kerberos = On
FTP = On
POP = On
SMTP = On
IMAP = On
HTTP = On
HTTPS = On
DNS = On
LDAP = On
DCERPC = On
WINRM = On

; Custom challenge. 
; Use "Random" for generating a random challenge for each requests (Default)
```

Hemos comprobado que sí, por lo tanto, lanzamos el responder con el siguiente comando:

`sudo responder -I eth0 -rdw`

![](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiI66kNPxWBzzaRGxat%2F-MiIGyRfGG1zlVMiSDZo%2Fresponder1.png?alt=media\&token=1a5cdf01-ab3c-4d3c-855b-929defc8a58c)

Con el responder activo, la victima tratará de abrir un recurso compartido que no existe y el responder envenenará esta solicitud:

![Este recurso está siendo accedido desde un cliente y no existe.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiI66kNPxWBzzaRGxat%2F-MiII2vCQ4752ymjZGnB%2Frecurso%20inexistente.png?alt=media\&token=21d7d646-178d-4298-aeca-46483fece341)

![Como podemos ver, tenemos el hash NetNTLM-v2 de vgarcía.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiI66kNPxWBzzaRGxat%2F-MiIIBCTW5IKSUK-oFO2%2Fresponder2.png?alt=media\&token=1d1580b7-5912-4090-9867-a15f9eff98aa)

### 2. Crackear el Hash

É​ste Hash que hemos recuperado no sirve para la tecnica PassTheHash pero si para crackearlo y obtener acceso.

En el directorio `/usr/share/responder/logs` encontramos unos logs con la forma `SMB-NTLMv2-SSP-$IP.txt` donde se almacenan todos los Hashes NetNTLM-v2 capturados.

![log de Hashes extraidos. contiene tres veces el Hash de mvazquez.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiI66kNPxWBzzaRGxat%2F-MiIJk6gTiawwk1vzl62%2Fresponder3.png?alt=media\&token=9b902169-c4ba-4bc8-9213-817715dc1b72)

Copiamos este fichero asegurándonos de que solo contenga un hash de cada victima y se los pasamos a **john** para que los crackee.

`john --wordlist=/usr/share/wordlists/rockyou.txt /RUTA_A/hash.txt --format=netntlmv2`

![Como vemos, la contraseña es Password2.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2Fsync%2F0e02d87ecdfc38bd1185cf94c0102e8c4316c90b.png?generation=1630512176433601\&alt=media)

### 3. Comprobar la contraseña

Utilizando CrackMapExec podemos averiguar si esta password es correcta y si podemos obtener una shell interactiva. Para ello utilizamos el siguiente comando:

`cme smb IP_VICTIMA -u USUARIO -P PASSWORD`

![Si amplia la imagen podrá ver como se verifica que Password2 es la contraseña correcta.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiI66kNPxWBzzaRGxat%2F-MiINgC0a4P-MUGFvIQl%2Fcme1.png?alt=media\&token=de281413-a433-4081-9a96-e69cd60a256f)

Como podemos ver en la captura anterior, Password1 no es la contraseña (Pone \[-] al lado de los intentos de logon) mientras que Password2 si que lo es (\[+] a los intentos de logon).

### 4. Entender por qué no tenemos capacidad de Shell Remota

Pero... No vemos nada de capacidad de obtener una shell con **PSexec**. Esto se debe a que, como hemos visto cuando implementabamos las [malas prácticas](https://ajcruz15.gitbook.io/red-team/active-directory-hacking/creando-un-laboratorio-de-ad/3.-misconfiguraciones-importantes#7-convertir-un-usuario-en-administrador-local-de-los-clientes) en nuestro servidor, el usuario **vgarcia** no es administrador de su dispositivo y por lo tanto no tiene capacidad de shell remota por defecto como ocurre con los administradores locales.

Vamos a intentarlo en este caso con el usuario **mvazquez** que hemos dicho que sí que es **administrador** **local** de la red (administrador en los clientes pero no en el servidor).

Tras realizar el proceso anterior hemos descubierto que la password de **mvazquez** es **Password1.**

![Si ampliamos veremosq ue al lado de los intentos de logon pone la palabra (Pwn3d!).](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiIP4nlq2QRafDZY9eq%2F-MiIPnXWEDd81o6Sx6qe%2Fcme2.png?alt=media\&token=8a902de0-d03c-4444-ad71-48704563fc1b)

Como vemos, mvazquez, al pertenecer al grupo administradores, si que tiene capacidad de Shell Remota sobre los equipos de la red.

### 5. Obtener una shell interactiva

Ya sabemos que con este usuario podemos obtener una shell interactiva así que vamos a utilizar una utilidad de Impacket que se llama PSExec para obtener nuestra shell full interactiva.

`impacket-psexec DOMINIO/USUARIO:PASSWORD@IP cmd.exe`

![¡Premio!](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiIP4nlq2QRafDZY9eq%2F-MiIR_OmEXT1R7sGdz1Z%2FPSExec1.png?alt=media\&token=76134c65-c7f7-45b5-afbc-5712fd9f4a04)

{% hint style="danger" %}
Si el equipo víctima tiene la Protección en tiempo real de Windows Defender activa, este ataque no se puede realizar. Por eso es tan importante tener un buen antivirus en ambientes empresariales.
{% endhint %}

Ya tenemos una shell interactiva en un activo de la empresa desde el que poder realizar movimiento lateral al DC.

### 6. Post-Exploiting

Por otra parte, si hemos conseguido las credenciales del Administrador de Dominio es lógico que tendremos acceso al DC así como a todos los equipos de la red.

#### Obtener información con RPCClient

Una vez tenemos unos credenciales válidos, podemos utilizar RPCClient para obtener los nombres de usuario y la información de los mismos así como información de los grupos.

{% hint style="info" %}
Esta parte está sacada exactamente del ejemplo de S4vitar en el siguiente [video](https://www.youtube.com/watch?v=LLevcaB4qew\&list=PLlb2ZjHtNkpg2Mc3mbkdYAhEoqnMGdl2Z\&index=2).
{% endhint %}

Utilizamos el comando rpcclient para obtener información sobre

![Listamos los usuarios del domino (el rid es el identificador del usuario).](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIZE1Lrmmnj3N-UiVu%2Fimagen.png?alt=media\&token=a2f3e52f-0adb-4c45-af5f-25abfcad91b5)

![Listamos los grupos del dominio (el rid es el identificador del grupo).](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIZwpsgvGE9HpW5rof%2Frpcclient1.png?alt=media\&token=d1034c5a-2f76-46d7-be76-96a8ef7d40c4)

A mi me interesa saber quienes forman parte del grupo Admins. del Dominio (rid 0x200) pues lo intentamos:

![Hay dos usuarios en el grupo Admins. del Dominio.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIZ1znxQhgYPIaswox%2Fimagen.png?alt=media\&token=c39eac74-3e49-4354-a7f1-28a89caf0ef2)

Hay dos usuarios en el grupo Admins del Dominio. Podemos ver los detalles de cada uno de ellos a ver si tenemos suerte.

![Este es el usuario Administrador.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIa3lXyY-ixQMXTxB-%2Frpcclient2.png?alt=media\&token=78c5b50b-b8fd-48bc-8647-f655d44845bc)

![¡Premio!](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIaAFLRNIkblXrudNE%2Fimagen.png?alt=media\&token=107588ab-74e1-4df3-91c0-e3c32f1a61ea)

{% hint style="success" %}
Como habiamos generado un usuario administrador del dominio con contraseña temporal, hemos conseguido obtener esta contraseña utilizando RPCClient para ver los datos de los usuarios que pertenecen al grupo que nos interesa.

Esto no es habitual pero tampoco es extraño encontrar un usuario con bajos privilegios y la contraseña temporal escrita en la Descripción.
{% endhint %}

Utilizando estos nuevos credenciales, vemos que efectivamente hemos comprometido a un Administrador de dominio

![DC-COMPANY es el Domain Controler.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIavSEW-BzlWzVELYQ%2Fimagen.png?alt=media\&token=3699705f-b5f5-4ae3-a8d0-1d5dafe69599)

#### Dumpear la SAM

Ahora que tenemos los credenciales del Administrador de Dominio y si quisieramos convertir éste ataque en un ataque de PassTheHash o quisieramos obtener credenciales para el resto de los usuarios de la red, podemos hacerlo con **CME dumpeando la SAM**.

![Estos Hashes son NTLM y permiten el acceso por PassTheHash.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiISW7LJNZHEu8Igyxn%2F-MiIVz0ITfdPRHqXaiCp%2Fcme3.png?alt=media\&token=e1b0b31c-2819-4a55-909b-7c15e49969f4)

#### Dumpear NTDS

De la misma manera podemos dumpear el NTDS (La base de datos del Directorio Activo) donde encontraremos el historial de contraseñas de todos los usuarios de AD.

![Así ganamos acceso al NTDS.](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiIqD3qE3zZYyS0Dn2A%2F-MiIsCJb30DKh9guibJ6%2Fimagen.png?alt=media\&token=0c21827c-c8b5-4ad3-a2bd-39524b806382)

#### PassTheHash

Por último podemos utilizar PTH-Winexe para utilizar estos Hashes para acceder al equipo:

![¡Premio!](https://3403442240-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhLaK1R01rLyFh-Jcoj%2F-MiItZmIVJwyXVd-Xs31%2F-MiItorUJ1hYu6VhIl_V%2Fimagen.png?alt=media\&token=badd0003-2237-4a7a-acba-b7e54415d6df)

## REFERENCIAS

<https://en.hackndo.com/pass-the-hash/#protocol-ntlm>\
<https://ethicalhackingguru.com/the-complete-ntlm-relay-attack-tutorial/>
