> 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/writes-ups/hack-the-box/medium/puppy.md).

# Puppy

## Información de la máquina

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

Puppy es una máquina de dificultad media que cuenta con un recurso compartido SMB no predeterminado llamado `DEV`. Con las credenciales proporcionadas para el usuario `levi.james`, es posible enumerar el dominio. La enumeración revela que este usuario tiene privilegios `GenericWrite` sobre el grupo `Developers`. Tras añadir a Levi a este grupo, podemos acceder al recurso compartido `DEV`, anteriormente inaccesible. Este recurso compartido contiene la copia de seguridad de una base de datos `KeePass`, cuyo hash podemos descargar, exportar y descifrar. La base de datos revela una gran cantidad de combinaciones de nombre de usuario y contraseña. Un ataque de rociado de contraseñas muestra que una de las contraseñas es válida para el usuario `Ant.Edwards`. Además, este nuevo usuario tiene privilegios `GenericAll` sobre el usuario `Adam.Silver`, lo que nos permite cambiar su contraseña por una de nuestra elección. Tras cambiar la contraseña, debemos volver a habilitar la cuenta de Adam, ya que estaba deshabilitada, lo que nos permite conectarnos al sistema remoto mediante WinRM. El acceso lateral se logra encontrando la copia de seguridad de un sitio web que contiene las credenciales del usuario `Steph.cooper`. Finalmente, se escalan los privilegios mediante las credenciales `DPAPI`, que se descifran con la contraseña de Steph. Las credenciales reveladas pertenecen a `Steph.cooper_adm`, presumiblemente la cuenta administrativa de Steph, y se puede establecer una conexión mediante WinRM.

## Reconocimiento

Empezaremos haciendo un primer reconocimiento para ver los puertos abiertos en el sistema.

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

**1. `-p-` → Escaneo de todos los puertos (1-65535)**

Por defecto, `nmap` solo escanea los **1000 puertos más comunes**.\
Con `-p-`, forzamos a que escanee **los 65,535 puertos** de la máquina objetivo, lo que puede ser útil para encontrar servicios que corren en puertos poco convencionales.

**2. `--open` → Filtrar solo los puertos abiertos**

Cuando escaneamos un sistema, muchos puertos pueden estar cerrados o filtrados por un firewall.\
Este parámetro hace que `nmap` **solo muestre los puertos abiertos**, reduciendo el ruido y facilitando el análisis.

**3. `-sS` → Stealth Scan (Escaneo Sigiloso con SYN)**

Es conocido como **"TCP SYN Scan"**, y funciona de la siguiente manera:

* `nmap` envía un paquete **SYN** (solicitud de conexión).
* &#x20;Si el puerto está abierto, el servidor responde con **SYN-ACK**.
* En lugar de completar la conexión con un **ACK**, `nmap` responde con un **RST (Reset)**, interrumpiendo la comunicación.

**4. `--min-rate 5000` → Velocidad mínima de paquetes (5000 por segundo)**

Por defecto, `nmap` ajusta dinámicamente la velocidad de los paquetes según la respuesta de la red.\
Con `--min-rate 5000`, obligamos a `nmap` a **no enviar menos de 5000 paquetes por segundo**, acelerando el escaneo.

**5. `-n` → Deshabilitar resolución DNS**

Normalmente, `nmap` intenta resolver el nombre de dominio de las IPs escaneadas (DNS lookup).\
Con `-n`, evitamos esta resolución de nombres, lo que **acelera el escaneo** y evita que los servidores DNS registren nuestra actividad.

**6. `-Pn` → Omitir detección de host (Host Discovery Off)**

Por defecto, `nmap` envía paquetes ICMP (ping) para ver si un host está activo antes de escanearlo.\
Si un firewall bloquea los pings, `nmap` puede marcarlo como "host down" y no escanearlo.

**7. `-oG`** **→ Exportar el contenido en formato grepeable**

Todo el resultado del escaneo lo exportaremos en un archivo llamado **`allPorts` .**

El escaneo revela muchos puertos abiertos. Ahora haremos un escaneo más detallado.

**1. `-p<puertos>` → Escaneo de puertos específicos**

Con `-p<puertos>`, le indicamos que **solo** escanee los puertos que queremos

**2. `-sCV` → Escaneo de versiones y scripts básicos**

Este parámetro en realidad es **dos combinaciones en una**:

* **`-sC`** → Activa los **NSE scripts por defecto** en `nmap` (similar a usar `--script=default`).\
  Ejecuta scripts básicos para enumerar información del servicio detectado, como banners, versiones, etc.
* **`-sV`** → Realiza **fingerprinting de versiones**, intentando identificar la versión exacta del software en cada puerto abierto.

**3. `-oN` → Guardar el resultado en formato Normal**

Por defecto, `nmap` muestra los resultados en pantalla, pero con **`-oN targeted`**, guardamos el resultado en un archivo en **formato legible para humanos**.

## Enumeración del dominio

Antes de empezar a enumerar, copiaremos las credenciales que nos proporciona la plataforma para empezar en un archivo credentials.txt

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

Con nxc, primero podemos ver el dominio y el nombre de la máquina

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

Con esto, añadimos los datos al /etc/hosts, ya que mas adelante nos hará falta.

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

Probaremos las credenciales que nos dan para ver si son correctas y vemos que si.

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

Listamos los recursos compartidos, y vemos un directorio interesante llamado DEV, aunque no tenemos permisos ni de lectura ni de escritura.

<figure><img src="/files/7jM7pPEZf550A4EAtgIc" alt=""><figcaption></figcaption></figure>

## Discovery Users

Toca seguir enumerando la máquina, en este caso usuarios del dominio. Con --rid-bruute, nos sale una lista muy larga aunque nos querdaremos con los últimos ya que los demás son grupos, alias.. como nos indica.

<figure><img src="/files/9c7TBHqB4kyxRiPlFC8i" alt=""><figcaption></figcaption></figure>

Copiamos los resultamos en un archivo.

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

Trataemos el archivo para quedarnos solo con los nombres.

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

Una vez lo tenemos, eliminaremos algunos resultamos que no nos hacen falta ya que son grupos tambien.

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

## Bloodhound

Despues de probar si se repiten los usuarios en contraseñas... El siguiente paso es usar BloodHound (explicar que es). Recolectamos los datos con nxc aunque también lo podemos hacer con bloodhound-python.

<figure><img src="/files/0mZYiNoKQ8mtHg35jeUa" alt=""><figcaption></figcaption></figure>

Para la instalación de Bloodhound nos iremos a su página y ejecutaremos los comandos que nos muestran.

{% embed url="<https://bloodhound.specterops.io/get-started/quickstart/community-edition-quickstart#bloodhound-community-edition-quickstart>" %}

Una vez dentro, el archivo anterior se lo pasamos hasta que lo revise por completo

<figure><img src="/files/8lDPZrbkMqmZVn2wCMaQ" alt=""><figcaption></figcaption></figure>

Buscamos el usurio levi.james que es el usuario con el que tenemos credenciales y podemos ver que tenemos el permiso GenericWrite en el grupo DEVELOPERS. Me hace pensar que si estoy en este grupo podré ver el recurso compartido DEV.

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

## Abuse GenericWrite to Group Developers

El permiso GenericWrite(explicar que es). Si pulsamos en este permiso, nos sale como poder abusar de este permiso para agregar a este usuario al grupo

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

Pegamos el comando y le cambiamos los datos por los apropiados. Ejecutamos y no nos muestra ningún fallo.

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

Probamos a enumerar los recursos compartidos de nuevo y como pensabamos, tenemos permisos de lectura en el recurso DEV.

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

Con smb podemos conectarnos a este recurso y vemos un archivo .kdbx (explicar que extensión es). Nos lo traemos a nuestro equipo para revisarlo.

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

## Keepass Brute Force

(Explicar que es keepass). Si abrimos el archivo con keepassxc, nos pide una contraseña. Esta la podriamos obtener con fuerza bruta.

<figure><img src="/files/1pNFZ8GETEHNEQYG2IOC" alt=""><figcaption></figcaption></figure>

Buscamos herramientas para hacerlo, y encontramos keepass4brute.

{% embed url="<https://github.com/r3nt0n/keepass4brute>" %}

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

Clonamos el repositorio y usamos el archivo que hemos descargado del recurso compartido y usamos el rockyou.txt para aplicar fuerza bruta. Encontramos que la contraseña es liverpool.

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

Ponemos la contraseña y obtenemos 5 contraseñas de 5 usuarios.

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

Copiamos todas las contraseñas en un archivo.

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

## Password Spraying -> ant.edward credentials

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

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

## Abuso GenericAll privilege -> Force Change Password

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

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

## Change userAccountControl to adam.silver -> ldapmodify

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

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

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

<figure><img src="/files/68fctEnxJOM4KWEt9kdT" alt=""><figcaption></figcaption></figure>

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

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

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

## Access DC via evil-winrm&#x20;

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

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

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

## Download Backup -> Credentials steph.cooper

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

<figure><img src="/files/7AnXSC6bDgjaHzyQ3wlS" alt=""><figcaption></figcaption></figure>

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

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

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

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

## Administrator access -> Winpeas.exe -> DPAPI Master Key
