1414 - Pentesting IBM MQ
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
IBM MQ is 'n IBM tegnologie om boodskap rye te bestuur. Soos ander boodskap broker tegnologieë, is dit toegewy aan die ontvang, stoor, verwerk en klassifiseer van inligting tussen produsente en verbruikers.
Standaard, dit stel IBM MQ TCP poort 1414 bloot. Soms kan HTTP REST API blootgestel word op poort 9443. Metings (Prometheus) kan ook vanaf TCP poort 9157 verkry word.
Die IBM MQ TCP poort 1414 kan gebruik word om boodskappe, rye, kanale, ... te manipuleer, maar ook om die instansie te beheer.
IBM bied 'n groot tegniese dokumentasie beskikbaar op https://www.ibm.com/docs/en/ibm-mq.
'n Voorstel gereedskap vir maklike eksploitatie is punch-q, met Docker gebruik. Die gereedskap gebruik aktief die Python biblioteek pymqi
.
Vir 'n meer handmatige benadering, gebruik die Python biblioteek pymqi. IBM MQ afhanklikhede is nodig.
IBM MQ afhanklikhede moet geïnstalleer en gelaai word:
Skep 'n rekening (IBMid) op https://login.ibm.com/.
Laai IBM MQ biblioteke af van 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. Vir Linux x86_64 is dit 9.0.0.4-IBM-MQC-LinuxX64.tar.gz.
Decomprimeer (tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz
).
Voer sudo ./mqlicense.sh
uit om lisensievoorwaardes te aanvaar.
As jy onder Kali Linux is, wysig die lêer
mqlicense.sh
: verwyder/comments die volgende lyne (tussen lyne 105-110):
Installeer hierdie pakkette:
Voeg dan tydelik die .so
lêers by LD: export LD_LIBRARY_PATH=/opt/mqm/lib64
, voor jy ander gereedskap gebruik wat hierdie afhanklikhede het.
Dan kan jy die projek pymqi kloon: dit bevat interessante kode-snippets, konstantes, ... Of jy kan die biblioteek direk installeer met: pip install pymqi
.
Gebruik eenvoudig: sudo docker run --rm -ti leonjza/punch-q
.
Kloon die projek punch-q en volg dan die readme vir installasie (pip install -r requirements.txt && python3 setup.py install
).
Daarna kan dit gebruik word met die punch-q
opdrag.
Jy kan probeer om die queue manager naam, die gebruikers, die kanale en die queues te enumerate met punch-q of pymqi.
Soms is daar geen beskerming teen die verkryging van die Queue Manager naam nie:
punch-q gebruik 'n interne (veranderbare) woordlys om bestaande kanale te vind. Gebruik voorbeeld:
Dit gebeur dat sommige IBM MQ instansies onaangetekende MQ versoeke aanvaar, so --username / --password
is nie nodig nie. Natuurlik kan toegangregte ook verskil.
Sodra ons een kanaalnaam kry (hier: DEV.ADMIN.SVRCONN
), kan ons al die ander kanale opnoem.
Die opnoeming kan basies gedoen word met hierdie kode-snippet code/examples/dis_channels.py
van pymqi:
... Maar punch-q embed ook daardie deel (met meer inligting!). Dit kan begin word met:
Daar is 'n kode-snippet met pymqi (dis_queues.py
) maar punch-q laat toe om meer stukke inligting oor die queues te verkry:
Jy kan rye(s)/kanaal(e) teiken om boodskappe uit hulle te snuffel / te dump (nie-destructiewe operasie). Voorbeelde:
Moet nie huiwer om op alle geïdentifiseerde rye te iterate nie.
Sommige besonderhede voordat ons voortgaan: IBM MQ kan op verskeie maniere beheer word: MQSC, PCF, Kontroleopdrag. Sommige algemene lyste kan gevind word in IBM MQ dokumentasie. PCF (Programmeerbare Opdrag Formate) is waaroor ons fokus om op afstand met die instansie te kommunikeer. punch-q en verder pymqi is gebaseer op PCF-interaksies.
Jy kan 'n lys van PCF-opdragte vind:
Een interessante opdrag is
MQCMD_CREATE_SERVICE
en sy dokumentasie is beskikbaar hier. Dit neem as argument 'nStartCommand
wat na 'n plaaslike program op die instansie verwys (voorbeeld:/bin/sh
).Daar is ook 'n waarskuwing van die opdrag in die dokumentasie: "Let op: Hierdie opdrag laat 'n gebruiker toe om 'n arbitrêre opdrag met mqm gesag uit te voer. As regte toegestaan word om hierdie opdrag te gebruik, kan 'n kwaadwillige of sorglose gebruiker 'n diens definieer wat jou stelsels of data benadeel, byvoorbeeld deur noodsaaklike lêers te verwyder."
Nota: altyd volgens IBM MQ dokumentasie (Administrasie Verwysing), is daar ook 'n HTTP-eindpunt by
/admin/action/qmgr/{qmgrName}/mqsc
om die ekwivalente MQSC-opdrag vir dienscreatie (DEFINE SERVICE
) uit te voer. Hierdie aspek is nog nie hier behandel nie.
Die dienscreatie / -verwydering met PCF vir afstandsprogramuitvoering kan gedoen word deur punch-q:
Voorbeeld 1
In die logs van IBM MQ, kan jy lees dat die opdrag suksesvol uitgevoer is:
Jy kan ook bestaande programme op die masjien opnoem (hier /bin/doesnotexist
... bestaan nie):
Wees bewus dat die programontplooi asynchrone is. So jy het 'n tweede item nodig om die ontploffing te benut (luisteraar vir omgekeerde dop, lêer skep op 'n ander diens, data eksfiltrasie deur die netwerk ...)
Voorbeeld 2
Vir 'n maklike omgekeerde dop, punch-q stel ook twee omgekeerde dop payloads voor:
Een met bash
Een met perl
Natuurlik kan jy 'n pasgemaakte een bou met die execute
opdrag.
Vir bash:
Vir perl:
Jy kan in die IBM MQ dokumentasie delf en direk die pymqi python biblioteek gebruik om spesifieke PCF opdragte te toets wat nie in punch-q geïmplementeer is nie.
Example:
If you cannot find the constant names, you can refer to the IBM MQ documentation.
Voorbeeld vir
MQCMD_REFRESH_CLUSTER
(Desimaal = 73). Dit benodig die parameterMQCA_CLUSTER_NAME
(Desimaal = 2029) wat*
kan wees (Dok: ):
If you want to test the IBM MQ behavior and exploits, you can set up a local environment based on Docker:
Having an account on ibm.com and cloud.ibm.com.
Create a containerized IBM MQ with:
Standaard is die outkenning geaktiveer, die gebruikersnaam is admin
en die wagwoord is passw0rd
(Omgewingsveranderlike MQ_ADMIN_PASSWORD
). Hier is die wageneerdernaam op MYQUEUEMGR
gestel (veranderlike MQ_QMGR_NAME
).
Jy moet die IBM MQ opgestel en aan die gang hê met sy poorte blootgestel:
Die ou weergawe van IBM MQ docker beelde is by: https://hub.docker.com/r/ibmcom/mq/.