<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium [hacktricks](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
IBM MQ to technologia firmy IBM do zarządzania kolejkami komunikatów. Podobnie jak inne technologie **brokera komunikatów**, jest dedykowana do odbierania, przechowywania, przetwarzania i klasyfikowania informacji między producentami a konsumentami.
Zalecanym narzędziem do łatwego wykorzystania jest **[punch-q](https://github.com/sensepost/punch-q)**, z użyciem Dockera. Narzędzie aktywnie korzysta z biblioteki Pythona `pymqi`.
Dla bardziej manualnego podejścia, użyj biblioteki Pythona **[pymqi](https://github.com/dsuch/pymqi)**. Potrzebne są [zależności 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. Utwórz konto (IBMid) na stronie [https://login.ibm.com/](https://login.ibm.com/).
2. Pobierz biblioteki IBM MQ ze strony [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). Dla Linux x86_64 jest to **9.0.0.4-IBM-MQC-LinuxX64.tar.gz**.
6. Następnie tymczasowo dodaj pliki `.so` do LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **przed** uruchomieniem innych narzędzi korzystających z tych zależności.
Następnie możesz sklonować projekt [**pymqi**](https://github.com/dsuch/pymqi): zawiera interesujące fragmenty kodu, stałe, ... Lub możesz bezpośrednio zainstalować bibliotekę za pomocą: `pip install pymqi`.
Sklonuj projekt [**punch-q**](https://github.com/sensepost/punch-q), a następnie postępuj zgodnie z instrukcjami w pliku readme dotyczącymi instalacji (`pip install -r requirements.txt && python3 setup.py install`).
Zdarza się, że niektóre instancje IBM MQ akceptują **nieuwierzytelnione** żądania MQ, więc nie jest wymagane użycie `--username / --password`. Oczywiście, prawa dostępu mogą się różnić.
> Kilka szczegółów przed kontynuacją: IBM MQ można kontrolować na wiele sposobów: MQSC, PCF, Control Command. Niektóre ogólne listy można znaleźć w [dokumentacji 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***) to to, na czym się skupiamy, aby zdalnie komunikować się z instancją. **punch-q** i dalej **pymqi** opierają się na interakcjach PCF.
> Jednym interesującym poleceniem jest `MQCMD_CREATE_SERVICE`, a jego dokumentacja jest dostępna [tutaj](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms). Jako argument przyjmuje `StartCommand`, wskazujący na lokalny program na instancji (przykład: `/bin/sh`).
>
> W dokumentacji znajduje się również ostrzeżenie dotyczące tego polecenia: *"Uwaga: To polecenie umożliwia użytkownikowi uruchomienie dowolnego polecenia z uprawnieniami mqm. Jeśli użytkownikowi zostaną przyznane uprawnienia do korzystania z tego polecenia, złośliwy lub nieostrożny użytkownik może zdefiniować usługę, która uszkodzi systemy lub dane, na przykład przez usunięcie istotnych plików."*
>
> *Uwaga: zawsze zgodnie z dokumentacją IBM MQ (Administration Reference), istnieje również punkt końcowy HTTP pod adresem `/admin/action/qmgr/{qmgrName}/mqsc`, aby uruchomić równoważne polecenie MQSC dla tworzenia usługi (`DEFINE SERVICE`). Ten aspekt nie jest jeszcze tutaj omawiany.*
**Bądź świadomy, że uruchomienie programu jest asynchroniczne. Więc potrzebujesz drugiego elementu, aby wykorzystać podatność** ***(słuchacz dla odwróconej powłoki, tworzenie pliku na innym serwisie, eksfiltracja danych przez sieć...)***
Możesz zgłębić dokumentację IBM MQ i bezpośrednio użyć biblioteki python **pymqi**, aby przetestować konkretną komendę PCF, która nie jest zaimplementowana w **punch-q**.
Jeśli nie możesz znaleźć nazw stałych, możesz odwołać się do [dokumentacji IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors).
> *Przykład dla [`MQCMD_REFRESH_CLUSTER`](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-mqcmd-refresh-cluster-refresh-cluster) (dziesiętnie = 73). Wymaga parametru `MQCA_CLUSTER_NAME` (dziesiętnie = 2029), który może być `*` (Dok: ):*