Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
IBM MQ είναι μια τεχνολογία της IBM για τη διαχείριση ουρών μηνυμάτων. Όπως άλλες τεχνολογίες **message broker**, είναι αφιερωμένη στη λήψη, αποθήκευση, επεξεργασία και ταξινόμηση πληροφοριών μεταξύ παραγωγών και καταναλωτών.
Ένα προτεινόμενο εργαλείο για εύκολη εκμετάλλευση είναι το **[punch-q](https://github.com/sensepost/punch-q)**, με χρήση Docker. Το εργαλείο χρησιμοποιεί ενεργά τη βιβλιοθήκη Python `pymqi`.
Για μια πιο χειροκίνητη προσέγγιση, χρησιμοποιήστε τη βιβλιοθήκη Python **[pymqi](https://github.com/dsuch/pymqi)**. [Εξαρτήσεις 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) είναι απαραίτητες.
2. Κατεβάστε τις βιβλιοθήκες 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](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**.
6. Στη συνέχεια, προσθέστε προσωρινά τα `.so` αρχεία στο LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **πριν** εκτελέσετε άλλα εργαλεία που χρησιμοποιούν αυτές τις εξαρτήσεις.
Στη συνέχεια, μπορείτε να κλωνοποιήσετε το έργο [**pymqi**](https://github.com/dsuch/pymqi): περιέχει ενδιαφέροντα αποσπάσματα κώδικα, σταθερές, ... Ή μπορείτε να εγκαταστήσετε απευθείας τη βιβλιοθήκη με: `pip install pymqi`.
Κλωνοποιήστε το έργο [**punch-q**](https://github.com/sensepost/punch-q) και στη συνέχεια ακολουθήστε το readme για την εγκατάσταση (`pip install -r requirements.txt && python3 setup.py install`).
Συμβαίνει μερικές φορές ορισμένες περιπτώσεις IBM MQ να δέχονται **μη αυθεντικοποιημένα** αιτήματα MQ, οπότε δεν χρειάζεται `--username / --password`. Φυσικά, τα δικαιώματα πρόσβασης μπορεί επίσης να διαφέρουν.
> Ορισμένες λεπτομέρειες πριν συνεχίσουμε: Το IBM MQ μπορεί να ελεγχθεί μέσω πολλών τρόπων: MQSC, PCF, Control Command. Ορισμένες γενικές λίστες μπορούν να βρεθούν στην [τεκμηρίωση του IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison).
> [**PCF**](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=commands-introduction-mq-programmable-command-formats) (***Προγραμματιζόμενες Μορφές Εντολών***) είναι αυτό που επικεντρωνόμαστε γιανα αλληλεπιδράσουμε απομακρυσμένα με την περίπτωση. **punch-q** και επιπλέον **pymqi** βασίζονται σε αλληλεπιδράσεις PCF.
> Μια ενδιαφέρουσα εντολή είναι η `MQCMD_CREATE_SERVICE` και η τεκμηρίωσή της είναι διαθέσιμη [εδώ](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms). Δέχεται ως επιχείρημα μια `StartCommand` που δείχνει σε ένα τοπικό πρόγραμμα στην περίπτωση (παράδειγμα: `/bin/sh`).
> Υπάρχει επίσης μια προειδοποίηση για την εντολή στα έγγραφα: *"Προσοχή: Αυτή η εντολή επιτρέπει σε έναν χρήστη να εκτελέσει μια αυθαίρετη εντολή με εξουσία mqm. Εάν παραχωρηθούν δικαιώματα για τη χρήση αυτής της εντολής, ένας κακόβουλος ή απρόσεκτος χρήστης θα μπορούσε να ορίσει μια υπηρεσία που θα βλάψει τα συστήματα ή τα δεδομένα σας, για παράδειγμα, διαγράφοντας απαραίτητα αρχεία."*
> *Σημείωση: πάντα σύμφωνα με την τεκμηρίωση του IBM MQ (Administration Reference), υπάρχει επίσης ένα HTTP endpoint στο `/admin/action/qmgr/{qmgrName}/mqsc` γιανα εκτελέσετε την αντίστοιχη εντολή MQSC για τη δημιουργία υπηρεσίας (`DEFINE SERVICE`). Αυτό το θέμα δεν έχει καλυφθεί ακόμα εδώ.*
**Να είστε προσεκτικοί ότι η εκκίνηση του προγράμματος είναι ασύγχρονη. Έτσι χρειάζεστε ένα δεύτερο στοιχείο γιανα εκμεταλλευτείτε την ευπάθεια** ***(listener for reverse shell, file creation on different service, data exfiltration through network ...)***
Μπορείτε να ερευνήσετε την τεκμηρίωση του IBM MQ και να χρησιμοποιήσετε απευθείας τη βιβλιοθήκη **pymqi** python γιανα δοκιμάσετε συγκεκριμένη εντολή PCF που δεν έχει υλοποιηθεί στο **punch-q**.
Αν δεν μπορείτε να βρείτε τα ονόματα σταθερών, μπορείτε να ανατρέξετε στην [τεκμηρίωση IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors).
> *Παράδειγμα για [`MQCMD_REFRESH_CLUSTER`](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-mqcmd-refresh-cluster-refresh-cluster) (Δεκαδικό = 73). Χρειάζεται την παράμετρο `MQCA_CLUSTER_NAME` (Δεκαδικό = 2029) η οποία μπορεί να είναι `*` (Έγγραφο: ):*
Κατά προεπιλογή, η αυθεντικοποίηση είναι ενεργοποιημένη, το όνομα χρήστη είναι `admin` και ο κωδικός πρόσβασης είναι `passw0rd` (Μεταβλητή περιβάλλοντος `MQ_ADMIN_PASSWORD`). Εδώ, το όνομα του διαχειριστή ουρών έχει οριστεί σε `MYQUEUEMGR` (μεταβλητή `MQ_QMGR_NAME`).