PostgreSQL

Enumeración

Versión

# Versión
SELECT version()

Usuarios

# Usuario actual
SELECT current_user

Privilegios

# Privilegio de superusuario
SELECT current_setting('is_superuser')

Bases de datos

# Listado de base de datos
SELECT datname FROM pg_database

Tablas

Columnas

Datos

Error-based SQLi

Union-based SQLi

Obtener información dentro de una sola columna

Time-based SQLi

Stacked Queries SQLi

Lectura y escritura de archivos

Para realizar operaciones de lectura y escritura de archivos mediante el comando COPY, el usuario debe contar con privilegios de superusuario o, alternativamente, poseer los roles pg_read_server_files y pg_write_server_files, respectivamente.

Lectura

Un inconveniente al usar el comando COPY para leer archivos es que espera que los datos estén separados por columnas, usando por defecto el carácter de tabulación \t como delimitador. Sin embargo, se puede cambiar este delimitador por otro carácter poco común, como \x07, para evitar errores durante la lectura.

Lectura con Large Objects

Escritura

Webshell

Escritura con Large Objects

Remote Code Execution (RCE)

Para usar COPY con ejecución de comandos, el usuario debe contar con privilegios de superusuario o tener el rol pg_execute_server_program.

Reverse shell

Ejecución de Netcat en máquina atacante en modo escucha.

Ejecución de reverse shell.

Evasión de filtros

Bypass de filtro de espacio

Usar /**/ en lugar de espacio.

Bypass de filtro de comillas simples (single quotes)

En PostgreSQL los dos signos de dólar $$ se utilizan para delimitar cadenas de texto.

Última actualización

¿Te fue útil?