1414 - Pentesting IBM MQ
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic information
IBM MQ एक IBM तकनीक है जो संदेश कतारों का प्रबंधन करती है। अन्य message broker तकनीकों की तरह, यह उत्पादकों और उपभोक्ताओं के बीच जानकारी प्राप्त करने, संग्रहीत करने, संसाधित करने और वर्गीकृत करने के लिए समर्पित है।
डिफ़ॉल्ट रूप से, यह IBM MQ TCP पोर्ट 1414 को उजागर करता है। कभी-कभी, HTTP REST API पोर्ट 9443 पर उजागर हो सकता है। मेट्रिक्स (Prometheus) को TCP पोर्ट 9157 से भी एक्सेस किया जा सकता है।
IBM MQ TCP पोर्ट 1414 का उपयोग संदेशों, कतारों, चैनलों, ... को हेरफेर करने के लिए किया जा सकता है, लेकिन इंस्टेंस को नियंत्रित करने के लिए भी।
IBM एक बड़ा तकनीकी दस्तावेज़ प्रदान करता है जो https://www.ibm.com/docs/en/ibm-mq पर उपलब्ध है।
Tools
आसान शोषण के लिए एक सुझाया गया उपकरण है punch-q, जिसमें Docker का उपयोग किया गया है। यह उपकरण सक्रिय रूप से Python पुस्तकालय pymqi
का उपयोग कर रहा है।
एक अधिक मैनुअल दृष्टिकोण के लिए, Python पुस्तकालय pymqi का उपयोग करें। IBM MQ dependencies की आवश्यकता है।
Installing pymqi
IBM MQ dependencies को स्थापित और लोड करने की आवश्यकता है:
https://login.ibm.com/ पर एक खाता (IBMid) बनाएं।
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 से IBM MQ पुस्तकालय डाउनलोड करें। 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
।
Using punch-q
With Docker
बस उपयोग करें: sudo docker run --rm -ti leonjza/punch-q
।
Without Docker
प्रोजेक्ट punch-q को क्लोन करें फिर स्थापना के लिए रीडमी का पालन करें (pip install -r requirements.txt && python3 setup.py install
)।
इसके बाद, इसे punch-q
कमांड के साथ उपयोग किया जा सकता है।
Enumeration
आप punch-q या pymqi के साथ क्यू प्रबंधक का नाम, उपयोगकर्ता, चैनल और क्यू को सूचीबद्ध करने का प्रयास कर सकते हैं।
Queue Manager
कभी-कभी, क्यू प्रबंधक का नाम प्राप्त करने के खिलाफ कोई सुरक्षा नहीं होती है:
Channels
punch-q एक आंतरिक (संशोधित करने योग्य) शब्द सूची का उपयोग कर रहा है ताकि मौजूदा चैनलों को खोजा जा सके। उपयोग का उदाहरण:
यह होता है कि कुछ IBM MQ उदाहरण अप्रमाणित MQ अनुरोधों को स्वीकार करते हैं, इसलिए --username / --password
की आवश्यकता नहीं है। बेशक, पहुँच अधिकार भी भिन्न हो सकते हैं।
जैसे ही हमें एक चैनल नाम मिलता है (यहाँ: DEV.ADMIN.SVRCONN
), हम सभी अन्य चैनलों की गणना कर सकते हैं।
गणना मूल रूप से इस कोड स्निपेट code/examples/dis_channels.py
से की जा सकती है pymqi:
... लेकिन punch-q उस भाग को भी एम्बेड करता है (और अधिक जानकारी के साथ!)। इसे लॉन्च किया जा सकता है:
Queues
एक कोड स्निपेट है pymqi (dis_queues.py
) लेकिन punch-q कतारों के बारे में अधिक जानकारी प्राप्त करने की अनुमति देता है:
Exploit
Dump messages
आप कतार(ों)/चैनल(ों) को लक्षित कर सकते हैं ताकि उनसे संदेशों को स्निफ़/डंप किया जा सके (गैर-नाशक ऑपरेशन)। Examples:
सभी पहचाने गए कतारों पर दोहराने में संकोच न करें।
कोड निष्पादन
कुछ विवरण आगे बढ़ने से पहले: IBM MQ को कई तरीकों से नियंत्रित किया जा सकता है: MQSC, PCF, नियंत्रण कमांड। कुछ सामान्य सूचियाँ IBM MQ दस्तावेज़ में पाई जा सकती हैं। PCF (प्रोग्रामेबल कमांड फॉर्मेट्स) पर हम दूरस्थ रूप से उदाहरण के साथ बातचीत करने के लिए ध्यान केंद्रित कर रहे हैं। punch-q और इसके अलावा pymqi PCF इंटरैक्शन पर आधारित हैं।
आप PCF कमांड की एक सूची पा सकते हैं:
PCF दस्तावेज़ से, और
एक दिलचस्प कमांड है
MQCMD_CREATE_SERVICE
और इसका दस्तावेज़ यहाँ उपलब्ध है। यह एकStartCommand
को तर्क के रूप में लेता है जो उदाहरण पर एक स्थानीय प्रोग्राम की ओर इशारा करता है (उदाहरण:/bin/sh
)।दस्तावेज़ में कमांड का एक चेतावनी भी है: "ध्यान दें: यह कमांड एक उपयोगकर्ता को mqm अधिकार के साथ एक मनमाना कमांड चलाने की अनुमति देती है। यदि इस कमांड का उपयोग करने के लिए अधिकार दिए जाते हैं, तो एक दुर्भावनापूर्ण या लापरवाह उपयोगकर्ता एक सेवा परिभाषित कर सकता है जो आपके सिस्टम या डेटा को नुकसान पहुंचाती है, उदाहरण के लिए, आवश्यक फ़ाइलों को हटाकर।"
नोट: हमेशा IBM MQ दस्तावेज़ (प्रशासन संदर्भ) के अनुसार,
/admin/action/qmgr/{qmgrName}/mqsc
पर एक HTTP एंडपॉइंट भी है जो सेवा निर्माण के लिए समकक्ष MQSC कमांड (DEFINE SERVICE
) चलाने के लिए है। यह पहलू यहाँ अभी तक कवर नहीं किया गया है।
दूरस्थ प्रोग्राम निष्पादन के लिए PCF के साथ सेवा निर्माण / हटाने को punch-q द्वारा किया जा सकता है:
उदाहरण 1
IBM MQ के लॉग में, आप पढ़ सकते हैं कि कमांड सफलतापूर्वक निष्पादित हुआ है:
आप मशीन पर मौजूदा प्रोग्रामों की गणना भी कर सकते हैं (यहाँ /bin/doesnotexist
... मौजूद नहीं है):
ध्यान रखें कि प्रोग्राम लॉन्च असिंक्रोनस है। इसलिए आपको एक्सप्लॉइट का लाभ उठाने के लिए एक दूसरा आइटम चाहिए (रिवर्स शेल के लिए लिस्नर, विभिन्न सेवा पर फ़ाइल निर्माण, नेटवर्क के माध्यम से डेटा निकासी ...)
उदाहरण 2
आसान रिवर्स शेल के लिए, punch-q दो रिवर्स शेल पेलोड भी प्रदान करता है:
एक bash के साथ
एक perl के साथ
बिल्कुल, आप execute
कमांड के साथ एक कस्टम बना सकते हैं।
bash के लिए:
perl के लिए:
Custom PCF
आप IBM MQ दस्तावेज़ में गहराई से जा सकते हैं और pymqi पायथन पुस्तकालय का सीधे उपयोग कर सकते हैं ताकि punch-q में लागू नहीं किए गए विशिष्ट PCF कमांड का परीक्षण किया जा सके।
Example:
यदि आप स्थायी नाम नहीं ढूंढ पा रहे हैं, तो आप 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 चालू और चल रहा होना चाहिए और इसके पोर्ट्स खोले हुए होने चाहिए:
IBM MQ डॉकर इमेज के पुराने संस्करण यहाँ हैं: https://hub.docker.com/r/ibmcom/mq/.
References
Last updated