<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Lavori in una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata su HackTricks**? o vuoi avere accesso all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* **Unisciti al** [**💬**](https://emojipedia.org/speech-balloon/) [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguimi** su **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR al [repo hacktricks](https://github.com/carlospolop/hacktricks) e al [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
IBM MQ è una tecnologia IBM per gestire code di messaggi. Come altre tecnologie di **message broker**, è dedicata a ricevere, archiviare, elaborare e classificare informazioni tra produttori e consumatori.
Uno strumento suggerito per una facile esecuzione è **[punch-q](https://github.com/sensepost/punch-q)**, con l'utilizzo di Docker. Lo strumento utilizza attivamente la libreria Python `pymqi`.
Per un approccio più manuale, utilizzare la libreria Python **[pymqi](https://github.com/dsuch/pymqi)**. Sono necessarie le [dipendenze 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).
1. Crea un account (IBMid) su [https://login.ibm.com/](https://login.ibm.com/).
2. Scarica le librerie IBM MQ da [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). Per Linux x86_64 è **9.0.0.4-IBM-MQC-LinuxX64.tar.gz**.
6. Successivamente, aggiungi temporaneamente i file `.so` a LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **prima** di eseguire altri strumenti che utilizzano queste dipendenze.
Clona il progetto [**punch-q**](https://github.com/sensepost/punch-q) e segui le istruzioni per l'installazione (`pip install -r requirements.txt && python3 setup.py install`).
Accade che alcune istanze di IBM MQ accettino richieste MQ **non autenticate**, quindi `--username / --password` non è necessario. Naturalmente, i diritti di accesso possono variare.
> Alcuni dettagli prima di continuare: IBM MQ può essere controllato attraverso diversi metodi: MQSC, PCF, Control Command. Alcuni elenchi generali possono essere trovati nella [documentazione di 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***) è ciò su cui ci concentriamo per interagire in remoto con l'istanza. **punch-q** e inoltre **pymqi** si basano su interazioni PCF.
> Un comando interessante è `MQCMD_CREATE_SERVICE` e la sua documentazione è disponibile [qui](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms). Prende come argomento un `StartCommand` che punta a un programma locale sull'istanza (esempio: `/bin/sh`).
>
> C'è anche un avviso sul comando nella documentazione: *"Attenzione: Questo comando consente a un utente di eseguire un comando arbitrario con l'autorità mqm. Se vengono concessi i diritti per utilizzare questo comando, un utente malintenzionato o negligente potrebbe definire un servizio che danneggia i tuoi sistemi o dati, ad esempio eliminando file essenziali."*
>
> *Nota: sempre secondo la documentazione di IBM MQ (Riferimento all'amministrazione), c'è anche un endpoint HTTP su `/admin/action/qmgr/{qmgrName}/mqsc` per eseguire l'equivalente comando MQSC per la creazione del servizio (`DEFINE SERVICE`). Questo aspetto non è ancora trattato qui.*
> 2023-10-10T19:13:01.713Z AMQ5030I: Il comando '808544aa7fc94c48' è stato avviato. ProcessId(618). [ArithInsert1(618), CommentInsert1(808544aa7fc94c48)]
**Fai attenzione che il lancio del programma è asincrono. Quindi hai bisogno di un secondo elemento per sfruttare l'exploit** ***(ascoltatore per la shell inversa, creazione di file su un servizio diverso, esfiltrazione di dati tramite la rete...)***
Puoi approfondire la documentazione di IBM MQ e utilizzare direttamente la libreria python **pymqi** per testare comandi PCF specifici non implementati in **punch-q**.
Se non riesci a trovare i nomi delle costanti, puoi fare riferimento alla [documentazione di IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors).
> *Esempio per [`MQCMD_REFRESH_CLUSTER`](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-mqcmd-refresh-cluster-refresh-cluster) (Decimale = 73). Richiede il parametro `MQCA_CLUSTER_NAME` (Decimale = 2029) che può essere `*` (Doc: ):*