> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/databases-for-juniors/puerto-5432-postgresql.md).

# Puerto 5432: PostgreSQL

**PostgreSQL** es un sistema de gestión de bases de datos relacional y de código abierto conocido por su robustez, rendimiento y conformidad con el estándar SQL. Utiliza el puerto 5432 por defecto para aceptar conexiones de clientes.

## <mark style="color:green;">Descripción de PostgreSQL y el Puerto 5432</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> PostgreSQL utiliza un protocolo de comunicación propio sobre TCP para la interacción entre el cliente y el servidor. El puerto predeterminado para PostgreSQL es el 5432.
* <mark style="color:green;">**Funcionalidad**</mark><mark style="color:green;">:</mark> PostgreSQL es altamente extensible y soporta una amplia gama de tipos de datos, funciones, y procedimientos almacenados. Ofrece características avanzadas como integridad referencial, triggers, vistas, y soporte para transacciones ACID.
* <mark style="color:green;">**Seguridad**</mark><mark style="color:green;">:</mark> PostgreSQL proporciona múltiples capas de seguridad, incluyendo autenticación basada en roles, SSL/TLS para cifrado de tráfico, y listas de control de acceso.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia de PostgreSQL en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Acceso No Autorizado**</mark><mark style="color:green;">:</mark> Configuraciones incorrectas de autenticación pueden permitir a los atacantes obtener acceso no autorizado a la base de datos.
* <mark style="color:green;">**Exposición de Datos**</mark><mark style="color:green;">:</mark> Las bases de datos expuestas sin cifrado pueden ser interceptadas por atacantes, exponiendo datos sensibles.
* <mark style="color:green;">**Enumeración de Objetos**</mark><mark style="color:green;">:</mark> Los pentesters pueden enumerar esquemas, tablas, y otros objetos para mapear la estructura de la base de datos y encontrar posibles vulnerabilidades.
* <mark style="color:green;">**Inyección SQL**</mark><mark style="color:green;">:</mark> PostgreSQL es susceptible a inyecciones SQL si las consultas no están correctamente parametrizadas.

## <mark style="color:green;">Ejemplo de Escaneo de PostgreSQL con Nmap</mark>

Para identificar servidores PostgreSQL activos y recopilar información adicional sobre los servicios PostgreSQL, se puede utilizar Nmap con scripts NSE específicos.

### <mark style="color:green;">**Comando Nmap**</mark>

```bash
nmap -p 5432 --script pgsql-info target-ip
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 5432`: Especifica que Nmap debe escanear el puerto 5432, el puerto predeterminado para PostgreSQL.
* `--script pgsql-info`: Utiliza el script NSE `pgsql-info` para recopilar información sobre el servidor PostgreSQL.
* `target-ip`: Especifica la dirección IP del objetivo.

**Ejemplo de Salida de Nmap**

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-19 00:10 UTC
Nmap scan report for 192.168.1.210
Host is up (0.0018s latency).

PORT     STATE SERVICE
5432/tcp open  postgresql
| pgsql-info: 
|   Version: 
|     PostgreSQL 13.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 10.2.0, 64-bit
|   SSL Enabled: 
|     Supported
|   Connection Settings: 
|     Application Name: 
|     Client Encoding: 
|     Date Style: 
|     Interval Style: 
|     Time Zone: 
|     Integer Datetimes: 
|   Configuration: 
|     max_connections: 100
|     shared_buffers: 128MB
|     temp_buffers: 8MB
|     work_mem: 4MB
|     maintenance_work_mem: 64MB
|     dynamic_shared_memory_type: posix
|     max_worker_processes: 8
|     max_parallel_workers: 8
|     max_parallel_workers_per_gather: 2
|   Databases: 
|     - postgres
|     - template0
|     - template1
|_    - mydb

Nmap done: 1 IP address (1 host up) scanned in 8.67 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**5432/tcp open postgresql**</mark><mark style="color:green;">:</mark> El puerto 5432 está abierto y el servicio PostgreSQL está activo.
* <mark style="color:green;">**pgsql-info**</mark><mark style="color:green;">:</mark> Proporciona información detallada sobre el servidor PostgreSQL.
  * <mark style="color:green;">**Version**</mark><mark style="color:green;">:</mark> `PostgreSQL 13.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 10.2.0, 64-bit`.
  * <mark style="color:green;">**SSL Enabled**</mark><mark style="color:green;">:</mark> Soporte para SSL (`Supported`).
  * <mark style="color:green;">**Connection Settings**</mark><mark style="color:green;">:</mark> Información sobre la configuración de la conexión (nombre de la aplicación, codificación del cliente, estilo de fecha, estilo de intervalo, zona horaria, tiempos de enteros).
  * <mark style="color:green;">**Configuration**</mark><mark style="color:green;">:</mark> Configuración del servidor PostgreSQL.
    * <mark style="color:green;">**max\_connections**</mark><mark style="color:green;">:</mark> Máximo de conexiones permitidas (`100`).
    * <mark style="color:green;">**shared\_buffers**</mark><mark style="color:green;">:</mark> Tamaño de los buffers compartidos (`128MB`).
    * <mark style="color:green;">**temp\_buffers**</mark><mark style="color:green;">:</mark> Tamaño de los buffers temporales (`8MB`).
    * <mark style="color:green;">**work\_mem**</mark><mark style="color:green;">:</mark> Memoria de trabajo (`4MB`).
    * <mark style="color:green;">**maintenance\_work\_mem**</mark><mark style="color:green;">:</mark> Memoria de mantenimiento (`64MB`).
    * <mark style="color:green;">**dynamic\_shared\_memory\_type**</mark><mark style="color:green;">:</mark> Tipo de memoria compartida dinámica (`posix`).
    * <mark style="color:green;">**max\_worker\_processes**</mark><mark style="color:green;">:</mark> Máximo de procesos de trabajo (`8`).
    * <mark style="color:green;">**max\_parallel\_workers**</mark><mark style="color:green;">:</mark> Máximo de trabajadores paralelos (`8`).
    * <mark style="color:green;">**max\_parallel\_workers\_per\_gather**</mark><mark style="color:green;">:</mark> Máximo de trabajadores paralelos por operación de recolección (`2`).
  * <mark style="color:green;">**Databases**</mark><mark style="color:green;">:</mark> Bases de datos disponibles en el servidor (`postgres`, `template0`, `template1`, `mydb`).
