RCE with PostgreSQL Extensions
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Επεκτάσεις PostgreSQL
Η PostgreSQL έχει αναπτυχθεί με την επεκτασιμότητα ως βασικό χαρακτηριστικό, επιτρέποντας την απρόσκοπτη ενσωμάτωσή επεκτάσεων όπως αν ήταν ενσωματωμένες λειτουργίες. Αυτές οι επεκτάσεις, ουσιαστικά βιβλιοθήκες γραμμένες σε C, εμπλουτίζουν τη βάση δεδομένων με επιπλέον συναρτήσεις, τελεστές ή τύπους.
Από την έκδοση 8.1 και μετά, επιβάλλεται μια συγκεκριμένη απαίτηση στις βιβλιοθήκες επεκτάσεων: πρέπει να είναι συμπιεσμένες με μια ειδική κεφαλίδα. Χωρίς αυτό, η PostgreSQL δεν θα τις εκτελέσει, διασφαλίζοντας ότι χρησιμοποιούνται μόνο συμβατές και δυνητικά ασφαλείς επεκτάσεις.
Επίσης, έχετε υπόψη ότι αν δεν ξέρετε πώς να ανεβάσετε αρχεία στον θύμα εκμεταλλευόμενοι την PostgreSQL θα πρέπει να διαβάσετε αυτή την ανάρτηση.
RCE σε Linux
Για περισσότερες πληροφορίες ελέγξτε: https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/
Η εκτέλεση συστημικών εντολών από την PostgreSQL 8.1 και παλαιότερες εκδόσεις είναι μια διαδικασία που έχει τεκμηριωθεί σαφώς και είναι απλή. Είναι δυνατόν να χρησιμοποιήσετε αυτό: Modul Metasploit.
Ωστόσο, όταν επιχειρήθηκε σε μεγαλύτερες εκδόσεις εμφανίστηκε το εξής σφάλμα:
Αυτό το σφάλμα εξηγείται στην τεκμηρίωση του PostgreSQL:
Για να διασφαλιστεί ότι ένα δυναμικά φορτωμένο αρχείο αντικειμένου δεν φορτώνεται σε έναν ασύμβατο διακομιστή, το PostgreSQL ελέγχει ότι το αρχείο περιέχει ένα “μαγικό μπλοκ” με τα κατάλληλα περιεχόμενα. Αυτό επιτρέπει στον διακομιστή να ανιχνεύει προφανείς ασυμβατότητες, όπως κώδικα που έχει μεταγλωττιστεί για μια διαφορετική κύρια έκδοση του PostgreSQL. Ένα μαγικό μπλοκ απαιτείται από την έκδοση 8.2 του PostgreSQL. Για να συμπεριλάβετε ένα μαγικό μπλοκ, γράψτε αυτό σε ένα (και μόνο ένα) από τα αρχεία πηγής του module, αφού έχετε συμπεριλάβει την κεφαλίδα fmgr.h:
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
Από την έκδοση 8.2 του PostgreSQL, η διαδικασία για έναν επιτιθέμενο να εκμεταλλευτεί το σύστημα έχει γίνει πιο δύσκολη. Ο επιτιθέμενος απαιτείται είτε να χρησιμοποιήσει μια βιβλιοθήκη που είναι ήδη παρούσα στο σύστημα είτε να ανεβάσει μια προσαρμοσμένη βιβλιοθήκη. Αυτή η προσαρμοσμένη βιβλιοθήκη πρέπει να έχει μεταγλωττιστεί κατά της συμβατής κύριας έκδοσης του PostgreSQL και πρέπει να περιλαμβάνει ένα συγκεκριμένο "μαγικό μπλοκ". Αυτό το μέτρο αυξάνει σημαντικά τη δυσκολία εκμετάλλευσης των συστημάτων PostgreSQL, καθώς απαιτεί μια πιο βαθιά κατανόηση της αρχιτεκτονικής του συστήματος και της συμβατότητας εκδόσεων.
Μεταγλωττίστε τη βιβλιοθήκη
Αποκτήστε την έκδοση του PostgreSQL με:
Για συμβατότητα, είναι ουσιώδες οι κύριες εκδόσεις να ευθυγραμμίζονται. Επομένως, η σύνθεση μιας βιβλιοθήκης με οποιαδήποτε έκδοση εντός της σειράς 9.6.x θα πρέπει να διασφαλίσει επιτυχημένη ενσωμάτωση.
Για να εγκαταστήσετε αυτή την έκδοση στο σύστημά σας:
Και να συντάξετε τη βιβλιοθήκη:
Στη συνέχεια, ανεβάστε τη συμπιεσμένη βιβλιοθήκη και εκτελέστε εντολές με:
Μπορείτε να βρείτε αυτή τη βιβλιοθήκη προετοιμασμένη για πολλές διαφορετικές εκδόσεις PostgreSQL και μπορείτε ακόμη να αυτοματοποιήσετε αυτή τη διαδικασία (αν έχετε πρόσβαση στο PostgreSQL) με:
RCE σε Windows
Η παρακάτω DLL δέχεται ως είσοδο το όνομα του δυαδικού και τον αριθμό των φορών που θέλετε να το εκτελέσετε και το εκτελεί:
Μπορείτε να βρείτε το DLL που έχει μεταγλωττιστεί σε αυτό το zip:
Μπορείτε να υποδείξετε σε αυτό το DLL ποιο δυαδικό να εκτελέσει και τον αριθμό των φορών που θα το εκτελέσει, σε αυτό το παράδειγμα θα εκτελέσει το calc.exe
2 φορές:
Στο εδώ μπορείτε να βρείτε αυτό το reverse-shell:
Σημειώστε πώς σε αυτή την περίπτωση ο κακόβουλος κώδικας είναι μέσα στη συνάρτηση DllMain. Αυτό σημαίνει ότι σε αυτή την περίπτωση δεν είναι απαραίτητο να εκτελέσετε τη φορτωμένη συνάρτηση στο postgresql, απλώς φορτώνοντας το DLL θα εκτελέσει το reverse shell:
Το PolyUDF project είναι επίσης ένα καλό σημείο εκκίνησης με το πλήρες έργο MS Visual Studio και μια έτοιμη προς χρήση βιβλιοθήκη (συμπεριλαμβανομένων: command eval, exec και cleanup) με υποστήριξη πολλαπλών εκδόσεων.
RCE στις πιο πρόσφατες εκδόσεις του PostgreSQL
Στις πιο πρόσφατες εκδόσεις του PostgreSQL, έχουν επιβληθεί περιορισμοί όπου ο superuser
είναι απαγορευμένος από το φορτώσει αρχεία κοινής βιβλιοθήκης εκτός από συγκεκριμένους καταλόγους, όπως C:\Program Files\PostgreSQL\11\lib
στα Windows ή /var/lib/postgresql/11/lib
σε συστήματα *nix. Αυτοί οι κατάλογοι είναι ασφαλισμένοι κατά των λειτουργιών εγγραφής είτε από τους λογαριασμούς NETWORK_SERVICE είτε postgres.
Παρά αυτούς τους περιορισμούς, είναι δυνατόν για έναν αυθεντικοποιημένο superuser
της βάσης δεδομένων να γράψει δυαδικά αρχεία στο σύστημα αρχείων χρησιμοποιώντας "μεγάλες αντικείμενα." Αυτή η δυνατότητα επεκτείνεται στη γραφή εντός του καταλόγου C:\Program Files\PostgreSQL\11\data
, ο οποίος είναι απαραίτητος για τις λειτουργίες της βάσης δεδομένων όπως η ενημέρωση ή η δημιουργία πινάκων.
Μια σημαντική ευπάθεια προκύπτει από την εντολή CREATE FUNCTION
, η οποία επιτρέπει την περιήγηση καταλόγων στον κατάλογο δεδομένων. Ως εκ τούτου, ένας αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή την περιήγηση για να γράψει ένα αρχείο κοινής βιβλιοθήκης στον κατάλογο δεδομένων και στη συνέχεια να το φορτώσει. Αυτή η εκμετάλλευση επιτρέπει στον επιτιθέμενο να εκτελεί αυθαίρετο κώδικα, επιτυγχάνοντας εκτέλεση εγγενών κωδίκων στο σύστημα.
Ροή επίθεσης
Πρώτα απ' όλα πρέπει να χρησιμοποιήσεις μεγάλες αντικείμενα για να ανεβάσεις το dll. Μπορείς να δεις πώς να το κάνεις αυτό εδώ:
Big Binary Files Upload (PostgreSQL)Μόλις ανεβάσεις την επέκταση (με το όνομα poc.dll για αυτό το παράδειγμα) στον κατάλογο δεδομένων, μπορείς να την φορτώσεις με:
Σημειώστε ότι δεν χρειάζεται να προσθέσετε την επέκταση .dll
καθώς η δημιουργία της συνάρτησης θα την προσθέσει.
Για περισσότερες πληροφορίες διαβάστε την αρχική δημοσίευση εδώ. Σε αυτή τη δημοσίευση αυτός ήταν ο κώδικας που χρησιμοποιήθηκε για τη δημιουργία της επέκτασης postgres (για να μάθετε πώς να μεταγλωττίσετε μια επέκταση postgres διαβάστε οποιαδήποτε από τις προηγούμενες εκδόσεις). Στην ίδια σελίδα δόθηκε αυτή η εκμετάλλευση για την αυτοματοποίηση αυτής της τεχνικής:
Αναφορές
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated