Oracle injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Σερβίρετε αυτή την ανάρτηση μια αντίγραφο από το wayback machine της διαγραμμένης ανάρτησης από https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
Η χρήση του Oracle για να κάνετε Out of Band HTTP και DNS αιτήματα είναι καλά τεκμηριωμένη, αλλά ως μέσο εξαγωγής SQL δεδομένων σε επιθέσεις. Μπορούμε πάντα να τροποποιήσουμε αυτές τις τεχνικές/λειτουργίες για να κάνουμε άλλες SSRF/XSPA.
Η εγκατάσταση του Oracle μπορεί να είναι πραγματικά επώδυνη, ειδικά αν θέλετε να ρυθμίσετε μια γρήγορη εγκατάσταση για να δοκιμάσετε εντολές. Ο φίλος και συνάδελφός μου στην Appsecco, Abhisek Datta, μου υπέδειξε το https://github.com/MaksymBilenko/docker-oracle-12c που μου επέτρεψε να ρυθμίσω μια εγκατάσταση σε μια t2.large AWS Ubuntu μηχανή και Docker.
Εκτέλεσα την εντολή docker με την επιλογή --network="host"
ώστε να μπορώ να μιμηθώ τον Oracle ως εγγενή εγκατάσταση με πλήρη πρόσβαση στο δίκτυο, κατά τη διάρκεια αυτής της ανάρτησης.
Για να βρω οποιαδήποτε πακέτα και συναρτήσεις που υποστηρίζουν μια διεύθυνση και αριθμό θύρας, έκανα μια αναζήτηση στο Google στην Oracle Database Online Documentation. Συγκεκριμένα,
Η αναζήτηση επέστρεψε τα εξής αποτελέσματα (όχι όλα μπορούν να χρησιμοποιηθούν για την εκτέλεση εξωτερικού δικτύου)
DBMS_NETWORK_ACL_ADMIN
UTL_SMTP
DBMS_XDB
DBMS_SCHEDULER
DBMS_XDB_CONFIG
DBMS_AQ
UTL_MAIL
DBMS_AQELM
DBMS_NETWORK_ACL_UTILITY
DBMS_MGD_ID_UTL
UTL_TCP
DBMS_MGWADM
DBMS_STREAMS_ADM
UTL_HTTP
Αυτή η πρόχειρη αναζήτηση προφανώς παραλείπει πακέτα όπως το DBMS_LDAP
(το οποίο επιτρέπει τη μεταφορά ενός ονόματος κεντρικού υπολογιστή και αριθμού θύρας) καθώς η σελίδα τεκμηρίωσης σας παραπέμπει απλώς σε μια διαφορετική τοποθεσία. Επομένως, μπορεί να υπάρχουν άλλα πακέτα Oracle που μπορούν να καταχραστούν για να γίνουν εξωτερικά αιτήματα που μπορεί να έχω παραλείψει.
Σε κάθε περίπτωση, ας ρίξουμε μια ματιά σε μερικά από τα πακέτα που έχουμε ανακαλύψει και καταγράψει παραπάνω.
DBMS_LDAP.INIT
Το πακέτο DBMS_LDAP
επιτρέπει την πρόσβαση σε δεδομένα από διακομιστές LDAP. Η συνάρτηση init()
αρχικοποιεί μια συνεδρία με έναν διακομιστή LDAP και παίρνει ένα όνομα κεντρικού υπολογιστή και αριθμό θύρας ως παράμετρο.
Αυτή η συνάρτηση έχει τεκμηριωθεί προηγουμένως για να δείξει την εξαγωγή δεδομένων μέσω DNS, όπως παρακάτω
Ωστόσο, δεδομένου ότι η συνάρτηση δέχεται ένα όνομα κεντρικού υπολογιστή και έναν αριθμό θύρας ως παραμέτρους, μπορείτε να το χρησιμοποιήσετε για να λειτουργήσει και ως σαρωτής θυρών.
Ακολουθούν μερικά παραδείγματα
Ένα ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.
δείχνει ότι η θύρα είναι κλειστή ενώ μια τιμή συνεδρίας δείχνει ότι η θύρα είναι ανοιχτή.
UTL_SMTP
Το πακέτο UTL_SMTP
έχει σχεδιαστεί για την αποστολή email μέσω SMTP. Το παράδειγμα που παρέχεται στον ιστότοπο τεκμηρίωσης της Oracle δείχνει πώς μπορείτε να χρησιμοποιήσετε αυτό το πακέτο για να στείλετε ένα email. Για εμάς, ωστόσο, το ενδιαφέρον είναι η δυνατότητα παροχής προδιαγραφών host και θύρας.
Ένα πρόχειρο παράδειγμα φαίνεται παρακάτω με τη λειτουργία UTL_SMTP.OPEN_CONNECTION
, με χρονικό όριο 2 δευτερολέπτων.
Ένα ORA-29276: transfer timeout
δείχνει ότι η θύρα είναι ανοιχτή αλλά δεν έχει καθοριστεί καμία σύνδεση SMTP, ενώ ένα ORA-29278: SMTP transient error: 421 Service not available
δείχνει ότι η θύρα είναι κλειστή.
UTL_TCP
Το πακέτο UTL_TCP
και οι διαδικασίες και συναρτήσεις του επιτρέπουν TCP/IP βασισμένη επικοινωνία με υπηρεσίες. Εάν προγραμματιστεί για μια συγκεκριμένη υπηρεσία, αυτό το πακέτο μπορεί εύκολα να γίνει ένας τρόπος εισόδου στο δίκτυο ή να εκτελέσει πλήρεις Αιτήσεις Από την Πλευρά του Διακομιστή, καθώς όλες οι πτυχές μιας σύνδεσης TCP/IP μπορούν να ελεγχθούν.
Το παράδειγμα στην ιστοσελίδα τεκμηρίωσης της Oracle δείχνει πώς μπορείτε να χρησιμοποιήσετε αυτό το πακέτο για να κάνετε μια ακατέργαστη σύνδεση TCP για να ανακτήσετε μια ιστοσελίδα. Μπορούμε να το απλοποιήσουμε λίγο περισσότερο και να το χρησιμοποιήσουμε για να κάνουμε αιτήσεις στην περίπτωση μεταδεδομένων για παράδειγμα ή σε μια αυθαίρετη υπηρεσία TCP/IP.
Ενδιαφέρον είναι ότι, λόγω της ικανότητας να δημιουργούνται ακατέργαστα αιτήματα TCP, αυτό το πακέτο μπορεί επίσης να χρησιμοποιηθεί για να ερωτήσει την υπηρεσία μεταδεδομένων της Instance όλων των παρόχων cloud, καθώς ο τύπος μεθόδου και οι επιπλέον κεφαλίδες μπορούν να περαστούν όλα μέσα στο αίτημα TCP.
UTL_HTTP και Ιστοσελίδες Αιτημάτων
Ίσως η πιο κοινή και ευρέως τεκμηριωμένη τεχνική σε κάθε tutorial Oracle SQL Injection εκτός ζώνης είναι το UTL_HTTP
package. Αυτό το πακέτο ορίζεται από την τεκμηρίωση ως - The UTL_HTTP package makes Hypertext Transfer Protocol (HTTP) callouts from SQL and PL/SQL. You can use it to access data on the Internet over HTTP.
Μπορείτε επιπλέον να χρησιμοποιήσετε αυτό για να εκτελέσετε μερικές στοιχειώδεις σάρωσεις θυρών καθώς και με ερωτήματα όπως
Ένα ORA-12541: TNS:no listener
ή ένα TNS:operation timed out
είναι σημάδι ότι η θύρα TCP είναι κλειστή, ενώ ένα ORA-29263: HTTP protocol error
ή δεδομένα είναι σημάδι ότι η θύρα είναι ανοιχτή.
Ένα άλλο πακέτο που έχω χρησιμοποιήσει στο παρελθόν με ποικίλη επιτυχία είναι η GETCLOB()
μέθοδος του HTTPURITYPE
Oracle abstract type που σας επιτρέπει να αλληλεπιδράτε με μια διεύθυνση URL και παρέχει υποστήριξη για το πρωτόκολλο HTTP. Η μέθοδος GETCLOB()
χρησιμοποιείται για να ανακτήσει την απόκριση GET από μια διεύθυνση URL ως τύπο δεδομένων CLOB.[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)