> 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/easy/cap.md).

# Cap

## Información de la máquina

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

Cap es una máquina Linux de dificultad fácil que ejecuta un servidor HTTP y realiza funciones administrativas, incluyendo capturas de red. Un control inadecuado da como resultado una `Referencia Directa a Objetos Insegura (IDOR)` que otorga acceso a la captura de otro usuario. La captura contiene credenciales en texto plano y puede utilizarse para obtener acceso. Posteriormente, se utiliza una función de Linux para escalar a la raíz.

***

## Reconocimiento

La fase de **reconocimiento** es el primer paso a la hora de resolver una máquina. Su objetivo es recopilar la mayor cantidad de información posible sobre el sistema objetivo, permitiendo entender su estructura, tecnología y posibles vectores de ataque.&#x20;

Empezaremos haciendo un ping a la máquina víctima para ver si está encendida y ante que nos enfrentamos.

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

Si recibimos respuesta, significa que la máquina está en línea. Además, observamos que el **TTL** (Time To Live) es **63**, lo que indica que es un sistema **Linux** (normalmente, los sistemas Windows tienen un TTL de 127).&#x20;

{% hint style="success" %}
Esto sucede porque Hack The Box virtualiza las máquinas, lo que a menudo reduce el TTL en un punto respecto al valor estándar.

En entornos reales tendrían los siguientes valores:

TTL Linux **→** 64

TTL Windows **→** 128
{% endhint %}

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

<figure><img src="/files/UFRzOVqfgpv6fOXN45Fs" 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 65535 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 **`puertos` .**

El escaneo revela 3 puertos abiertos, puerto 21(FTP), 22(SSH) y puerto 80(HTTP). Ahora realizamos un escaneo más avanzado sobre estos 3 puertos

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

**1. `-p21,22,80` → Escaneo de puertos específicos**

Con `-p21,22,80`, le indicamos que **solo** escanee los puertos  21 (FTP), 22 (SSH) y puerto 80 (HTTP)&#x20;

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

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

Esta es la captura de los resultados del escaneo sobre los puertos. Antes de visitar la web, useremos la herramienta `whatweb`, para saber que datos con que tecnologías y que usa esta página.

<figure><img src="/files/5qQUgitRmLKJ8zZqFRB7" alt=""><figcaption></figcaption></figure>

Vemos algunas versiones como la de <mark style="color:green;">JQuery(2.2.4)</mark> y <mark style="color:green;">Modernizr\[2.8.3.min]</mark>, pero no suponen ningún riesgo.

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

Viendo la página web al detalle, vemos que estamos logueados como el Usuario `Nathan`. Tenemos un desplegable a la izquierda en el que podemos ver más páginas visibles en la web.

***

## IDOR

Encontramos un página en la que nos muestra una página que parece contener archivos guardados y donde también tenemos un botón de `Download`. Algo que es interesante es ver como nos indica el directorio actual mediante el número 5.

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

Probando opciones con otros números, veo que existen varias páginas de ficheros empezando desde el 0 que parece ser la página que más archivos tiene guardados.&#x20;

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

Como podemos ver, se acontece un `IDOR`

{% hint style="success" %}
El IDOR es un tipo de vulnerabilidad que ocurre **cuando una aplicación le permite a un usuario acceder directamente a objetos** (como recursos, funciones o archivos) **en función de la consulta que éste realice**, sin realizar el debido control de acceso.
{% endhint %}

***

## Credenciales filtradas desde archivo .pcap

Teniendo el archivo 0.pcap, usaremos `Tshark` para poder leer el binario.

{% hint style="success" %}
TShark es un analizador de tráfico de red de línea de comando que permite capturar datos de paquetes desde una red activa o paquetes de lectura de un archivo de capturas guardado anteriormente.
{% endhint %}

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

El archivo contiene muchas líneas, pero si buscamos en ellas podemos ver unas credenciales:

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

USER: `nathan`, PASS: `Buck3tH4TF0RM3!`

## Acceso inicial mediante FTP y SSH con credenciales reutilizadas

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

Vemos que nos podemos conectar al servicio ftp con las credenciales obtenidas. Dentro podemos ver el archivo user.txt, que es la primera flag pero no podemos verla. Pero podemos descargarnos con get el archivo user.txt.

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

Y ya dentro de nuestro directorio de trabajo podemos visualizar la primera flag.

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

Ahora, intentamos loguearnos con SSH con las mismas credenciales:

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

Podemos ver que se reutiliza la contraseña, por lo que estamos dentro de la máquina.

***

## Capabilities mal configuradas en Python3.8

Hacemos un reconocimiento a la máquina, probando si hay permisos SUID mal configurados, tareas cron por detrás... Pero cuando buscamos por capabilities vemos como se nos reporta un archivo llamado `cap_setuid` y que está siendo ejecutado en `Python3.8` .

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

Para ver si este problema es crítico, hay una página llamda GTFObins, la cual muestra una lista de binarios de Unix legítimos, para entre otros propósitos, evadir shells restrictiva o elevar privilegios.

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

Podemos filtrar en ella por Capabilities y vemos que está python.

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

Aquí tenemos un PoC de como podemos escalar nuestros privilegios si este binario está mal configurado. De tal forma que:

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

De tal forma obtenemos una bash y podemos ver la flag final de root

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

***

## Conclusión

La máquina **`Cap`** nos enseña a explotar un sitio web que contiene un IDOR en el que con TShark podemos ver una captura con paquetes guardados anteriormente y una escalada de privilegios en la que se asignan capabilities a binarios que dan lugar a ello.
