1414 - Pentesting IBM MQ
Βασικές πληροφορίες
Το IBM MQ είναι μια τεχνολογία της IBM για τη διαχείριση ουρών μηνυμάτων. Όπως και άλλες τεχνολογίες message broker, αφορά τη λήψη, αποθήκευση, επεξεργασία και ταξινόμηση πληροφοριών μεταξύ παραγωγών και καταναλωτών.
Από προεπιλογή, εκθέτει τη θύρα TCP 1414 του IBM MQ. Μερικές φορές, η HTTP REST API μπορεί να εκτίθεται στη θύρα 9443. Οι μετρήσεις (Prometheus) μπορούν επίσης να προσπελαστούν από τη θύρα TCP 9157.
Η θύρα TCP 1414 του IBM MQ μπορεί να χρησιμοποιηθεί για την επεξεργασία μηνυμάτων, ουρών, καναλιών, ... αλλά και για τον έλεγχο της περίπτωσης.
Η IBM παρέχει μια μεγάλη τεχνική τεκμηρίωση που είναι διαθέσιμη στο https://www.ibm.com/docs/en/ibm-mq.
Εργαλεία
Ένα προτεινόμενο εργαλείο για εύκολη εκμετάλλευση είναι το punch-q, με χρήση Docker. Το εργαλείο χρησιμοποιεί ενεργά τη βιβλιοθήκη Python pymqi
.
Για μια πιο χειροκίνητη προσέγγιση, χρησιμοποιήστε τη βιβλιοθήκη Python pymqi. Χρειάζονται εξαρτήσεις IBM MQ.
Εγκατάσταση του pymqi
Πρέπει να εγκατασταθούν και να φορτωθούν οι εξαρτήσεις IBM MQ:
Δημιουργήστε έναν λογαριασμό (IBMid) στο https://login.ibm.com/.
Κατεβάστε τις βιβλιοθήκες IBM MQ από το https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc. Για το Linux x86_64 είναι το 9.0.0.4-IBM-MQC-LinuxX64.tar.gz.
Αποσυμπιέστε (
tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz
).Εκτελέστε
sudo ./mqlicense.sh
για να αποδεχτείτε τους όρους των αδειών.
Αν χρησιμοποιείτε Kali Linux, τροποποιήστε το αρχείο
mqlicense.sh
: αφαιρέστε/σχολιάστε τις παρακάτω γραμμές (μεταξύ των γραμμών 105-110):
Εγκαταστήστε αυτά τα πακέτα:
Στη συνέχεια, προσθέστε προσωρινά τα αρχεία
.so
στο LD:export LD_LIBRARY_PATH=/opt/mqm/lib64
, πριν εκτελέσετε άλλα εργαλεία που χρησιμοποιούν αυτές τις εξαρτήσεις.
Στη συνέχεια, μπορείτε να κλωνοποιήσετε το έργο pymqi: περιέχει ενδιαφέρουσες τμήματα κώδικα, σταθερές, ... Ή μπορείτε να εγκαταστήσετε απευθείας τη βιβλιοθήκη με: pip install pymqi
.
Χρήση του punch-q
Με το Docker
Απλά χρησιμοποιήστε: sudo docker run --rm -ti leonjza/punch-q
.
Χωρίς το Docker
Κλωνοποιήστε το έργο punch-q και ακολουθήστε τις οδηγίες εγκατάστασης στο αρχείο readme (pip install -r requirements.txt && python3 setup.py install
).
Στη συνέχεια, μπορεί να χρησιμοποιηθεί με την εντολή punch-q
.
Απαρίθμηση
Μπορείτε να προσπαθήσετε να απαριθμήσετε το όνομα του queue manager, τους χρήστες, τα κανάλια και τις ουρές με το punch-q ή το pymqi.
Διαχειριστής ουράς
Μερικές φορές, δεν υπάρχει προστασία κατά την ανάκτηση του ονόματος του διαχειριστή ουράς:
Κανάλια
Το punch-q χρησιμοποιεί μια εσωτερική (προσαρμόσιμη) λίστα λέξεων για να βρει υπάρχοντα κανάλια. Παράδειγμα χρήσης:
Συμβαίνει να υπάρχουν ορισμένες περιπτώσεις όπου οι εγκαταστάσεις IBM MQ αποδέχονται μη πιστοποιημένα αιτήματα MQ, οπότε δεν απαιτείται η χρήση --username / --password
. Φυσικά, τα δικαιώματα πρόσβασης μπορεί να διαφέρουν.
Αφού αποκτήσουμε ένα όνομα καναλιού (εδώ: DEV.ADMIN.SVRCONN
), μπορούμε να απαριθμήσουμε όλα τα υπόλοιπα κανάλια.
Η απαρίθμηση μπορεί να γίνει βασικά με το ακόλουθο απόσπασμα κώδικα code/examples/dis_channels.py
από το pymqi:
... Αλλά το punch-q επίσης ενσωματώνει αυτό το μέρος (με περισσότερες πληροφορίες!). Μπορεί να εκτελεστεί με την εντολή:
Ουρές
Υπάρχει ένα απόσπασμα κώδικα με το pymqi (dis_queues.py
) αλλά το punch-q επιτρέπει να ανακτήσετε περισσότερες πληροφορίες σχετικά με τις ουρές:
Εκμεταλλευτείτε
Απορροφήστε μηνύματα
Μπορείτε να στοχεύσετε ουρά(ς)/κανάλι(α) για να απορροφήσετε/αποθηκεύσετε μηνύματα από αυτά (μη καταστροφική λειτουργία). Παραδείγματα:
Μην διστάσετε να επαναλάβετε όλες τις εντοπισμένες ουρές.
Εκτέλεση κώδικα
Λίγες λεπτομέρειες πριν συνεχίσουμε: Το IBM MQ μπορεί να ελεγχθεί με πολλούς τρόπους: MQSC, PCF, Control Command. Ορισμένες γενικές λίστες μπορούν να βρεθούν στην τεκμηρίωση του IBM MQ. PCF (Programmable Command Formats) είναι αυτό που επικεντρωνόμαστε για να αλληλεπιδράσουμε απομακρυσμένα με την περίπτωση. Το punch-q και περαιτέρω το pymqi βασίζονται σε αλληλεπιδράσεις PCF.
Μπορείτε να βρείτε μια λίστα με εντολές PCF:
Μια ενδιαφέρουσα εντολή είναι η
MQCMD_CREATE_SERVICE
και η τεκμηρίωσή της είναι διαθέσιμη εδώ. Παίρνει ως παράμετρο έναStartCommand
που δείχνει σε ένα τοπικό πρόγραμμα στην περίπτωση (παράδειγμα:/bin/sh
).Υπάρχει επίσης μια προειδοποίηση για την εντολή στα έγγραφα: "Προσοχή: Αυτή η εντολή επιτρέπει σε έναν χρήστη να εκτελέσει μια αυθαίρετη εντολή με δικαιώματα mqm. Αν δοθούν δικαιώματα για τη χρήση αυτής της εντολής, ένας κακόβουλος ή απρόσεκτος χρήστης μπορεί να ορίσει έναν υπηρεσία που θα προκαλέσει ζημιά στα συστήματα ή τα δεδομένα σας, για παράδειγμα, διαγράφοντας απαραίτητα αρχεία."
Σημείωση: πάντα σύμφωνα με την τεκμηρίωση του IBM MQ (Αναφορά Διαχείρισης), υπάρχει επίσης ένα HTTP endpoint στο
/admin/action/qmgr/{qmgrName}/mqsc
για να εκτελέσετε την αντίστοιχη εντολή MQSC για τη δημιουργία υπηρεσίας (DEFINE SERVICE
). Αυτή η πτυχή δεν καλύπτεται ακόμα εδώ.
Η δημιουργία / διαγραφή υπηρεσίας με το PCF για απομακρυσμένη εκτέλεση προγράμματος μπορεί να γίνει με το punch-q:
Παράδειγμα 1
Στα αρχεία καταγραφής του IBM MQ, μπορείτε να διαβάσετε ότι η εντολή εκτελέστηκε με επιτυχία:
Μπορείτε επίσης να απαριθμήσετε τα υπάρχοντα προγράμματα στον υπολογιστή (εδώ /bin/doesnotexist
... δεν υπάρχει):
Προσοχή, η εκκίνηση του προγράμματος είναι ασύγχρονη. Επομένως, χρειάζεστε ένα δεύτερο στοιχείο για να εκμεταλλευτείτε την ευπάθεια (ακροατής για αντίστροφη κέλυφος, δημιουργία αρχείου σε διαφορετική υπηρεσία, διαρροή δεδομένων μέσω δικτύου ...)
Παράδειγμα 2
Για εύκολη αντίστροφη κέλυφος, το punch-q προτείνει επίσης δύο φορτία αντίστροφου κελύφους:
Ένα με το bash
Ένα με το perl
Φυσικά μπορείτε να δημιουργήσετε ένα προσαρμοσμένο με την εντολή execute
.
Για το bash:
Για perl:
Προσαρμοσμένο PCF
Μπορείτε να εξερευνήσετε την τεκμηρίωση του IBM MQ και να χρησιμοποιήσετε απευθείας τη βιβλιοθήκη pymqi της Python για να δοκιμάσετε συγκεκριμένη εντολή PCF που δεν έχει υλοποιηθεί στο punch-q.
Παράδειγμα:
Εάν δεν μπορείτε να βρείτε τα ονόματα των σταθερών, μπορείτε να ανατρέξετε στην τεκμηρίωση του IBM MQ.
Παράδειγμα για το
MQCMD_REFRESH_CLUSTER
(Δεκαδικό = 73). Χρειάζεται την παράμετροMQCA_CLUSTER_NAME
(Δεκαδικό = 2029) η οποία μπορεί να είναι*
(Έγγραφο: ):
Περιβάλλον δοκιμής
Εάν θέλετε να δοκιμάσετε τη συμπεριφορά και τις εκμεταλλεύσεις του IBM MQ, μπορείτε να δημιουργήσετε ένα τοπικό περιβάλλον βασισμένο σε Docker:
Έχοντας έναν λογαριασμό στο ibm.com και cloud.ibm.com.
Δημιουργήστε έναν ελαττωματικό IBM MQ με:
Από προεπιλογή, η πιστοποίηση είναι ενεργοποιημένη, το όνομα χρήστη είναι admin
και ο κωδικός πρόσβασης είναι passw0rd
(Μεταβλητή περιβάλλοντος MQ_ADMIN_PASSWORD
). Εδώ, το όνομα του διαχειριστή ουράς έχει οριστεί σε MYQUEUEMGR
(μεταβλητή MQ_QMGR_NAME
).
Θα πρέπει να έχετε το IBM MQ ενεργοποιημένο και να εκτίθενται οι θύρες του:
Οι παλιές εκδόσεις των εικόνων Docker του IBM MQ βρίσκονται στο: https://hub.docker.com/r/ibmcom/mq/.
Αναφορές
Last updated