Este es el canal de comunicación predeterminado que utiliza el motor de bases de datos PostgreSQL. Al igual que en MySQL, este permite que aplicaciones, servidores web y herramientas de administración se conecten a la base de datos para gestionar la información.

El cliente nativo de PostgreSQL en kali se llama psql. A diferencia de MySQL, el protocolo de PostgreSQL requiere que definamos explícitamente a qué la base de datos queremos conectarnos inicialmente. Ya que no sabemos cuales existen, utilizaremos la que trae por defecto llamada postgres. También utilizaremos el usuario postgres y contraseña postgres que trae por defecto.

Nuevamente nos topamos con problemas de compatibilidad de versiones. Nuestro equipo cuenta con la versión psql 18 que es de este año 2026, pero la versión de metasploitable2 corresponde al 2008.
Extracción de información
Una vez que hallamos ingresado, el lenguaje cambia ligeramente respecto a MySQL. Aquí los comandos del sistema de control empiezan con una barra invertida.



luego de investigar un poco, dimos con la forma de listar las tablas técnicas que empiezan con pg_. Aquí podemos ver dos interesantes, pg_shadow y pg_user. Siendo esta última la más importante, ya que guarda las credenciaes y los hashes de contraseña.
Para ver esta información lanzaremos el siguiente comando:
SELECT usename, passwd, usesuper, usecreatedb FROM pg_shadow;

Esto nos muestra los nombres de usuarios de la base de datos, sus contraseñas (en hash MD5), y si tienen privilegios de superusuario (t: significa true).
También podemos ver otro tipo de información, como el directorio donde se guardan los datos en el disco duro, o que versión exacta del motor y sistema operativo Linux corre aquí.

Prueba máxima
Ya que somos un superusuario, podemos intentar ver el contenido de un archivo real del sistema operativo.
nos crearemos una tabla temporal en la memoria:
CREATE TEMP TABLE contenido_archivo (linea text);
Leeremos el archivo /etc/passwd y lo copiamos en la tabla.
COPY contenido_archivo FROM '/etc/passwd';
Vemos la información.
SELECT * FROM contenido_archivo;

Hardening
Si estuviéramos en un entorno real, técnicamente tendríamos dos opciones:
- Actualizar a la última versión de PostgreSQL y ganar las ventajas como el cifrado TLS/SSL, parches de seguridad y gestión de permisos avanzados. Pero esto nos suma nuevos retos, partiendo por la actualización del SO del servidor, una mitigación compleja de datos, ya que el formato que se guardan físicamente en el disco duro cambia entre versiones no es sensilla.
- Si el servicio es obsoleto / innecesario, la mejor práctica es apagar el servicio y así reducir la superficie de ataque.
Vamos a aplicar esta segunda opción.
Detenemos el servicio de PostgreSQL
/etc/init.d/postgresql-8.3 stop
Eliminamos de raíz los enlaces de arranque automático del servicio.
update-rc.d -f postgresql-8.3 remove

