1414 - Pentesting IBM MQ
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
IBM MQ, mesaj kuyruklarını yönetmek için bir IBM teknolojisidir. Diğer mesaj aracısı teknolojileri gibi, üreticiler ve tüketiciler arasında bilgi almak, depolamak, işlemek ve sınıflandırmak için ayrılmıştır.
Varsayılan olarak, IBM MQ TCP port 1414'ü açar. Bazen, HTTP REST API 9443 portunda açılabilir. Metrikler (Prometheus) ayrıca 9157 TCP portundan erişilebilir.
IBM MQ TCP port 1414, mesajları, kuyrukları, kanalları manipüle etmek için kullanılabilir, ... ama aynı zamanda örneği kontrol etmek için de kullanılabilir.
IBM, https://www.ibm.com/docs/en/ibm-mq adresinde geniş bir teknik dokümantasyon sunmaktadır.
Kolay sömürü için önerilen bir araç punch-q, Docker kullanımı ile. Araç, aktif olarak pymqi
Python kütüphanesini kullanmaktadır.
Daha manuel bir yaklaşım için, pymqi Python kütüphanesini kullanın. IBM MQ bağımlılıkları gereklidir.
IBM MQ bağımlılıkları kurulmalı ve yüklenmelidir:
https://login.ibm.com/ adresinde bir hesap (IBMid) oluşturun.
IBM MQ kütüphanelerini 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 adresinden indirin. Linux x86_64 için 9.0.0.4-IBM-MQC-LinuxX64.tar.gz'dir.
Sıkıştırmayı açın (tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz
).
Lisans şartlarını kabul etmek için sudo ./mqlicense.sh
komutunu çalıştırın.
Kali Linux altında iseniz,
mqlicense.sh
dosyasını değiştirin: aşağıdaki satırları kaldırın/yorumlayın (105-110. satırlar arasında):
Bu paketleri kurun:
Ardından, geçici olarak .so
dosyalarını LD'ye ekleyin: export LD_LIBRARY_PATH=/opt/mqm/lib64
, diğer araçları bu bağımlılıkları kullanarak çalıştırmadan önce.
Sonra, projeyi pymqi klonlayabilirsiniz: ilginç kod parçacıkları, sabitler vb. içerir... Ya da kütüphaneyi doğrudan şu şekilde kurabilirsiniz: pip install pymqi
.
Basitçe şunu kullanın: sudo docker run --rm -ti leonjza/punch-q
.
Projeyi punch-q klonlayın ve ardından kurulum için readme'yi takip edin (pip install -r requirements.txt && python3 setup.py install
).
Sonrasında, punch-q
komutuyla kullanılabilir.
Queue manager adı, kullanıcılar, kanallar ve kuyruklar'ı punch-q veya pymqi ile saymayı deneyebilirsiniz.
Bazen, Queue Manager adını almak için herhangi bir koruma yoktur:
punch-q mevcut kanalları bulmak için iç (değiştirilebilir) bir kelime listesi kullanıyor. Kullanım örneği:
Bazı IBM MQ örneklerinin kimlik doğrulaması yapılmamış MQ isteklerini kabul ettiği durumlar vardır, bu nedenle --username / --password
gerekli değildir. Elbette, erişim hakları da değişkenlik gösterebilir.
Bir kanal adını (burada: DEV.ADMIN.SVRCONN
) aldığımız anda, diğer tüm kanalları listeleyebiliriz.
Listeleme, temel olarak pymqi'den code/examples/dis_channels.py
bu kod parçası ile yapılabilir:
... Ama punch-q bu kısmı da (daha fazla bilgi ile!) içerir. Şu şekilde başlatılabilir:
pymqi ile bir kod parçası var (dis_queues.py
) ama punch-q kuyruklar hakkında daha fazla bilgi parçası almayı sağlar:
Queue(ler)/kanal(lar) hedef alarak onlardan mesajları dinleyebilir / dökebilirsiniz (yıkıcı olmayan işlem). Örnekler:
Tespit edilen tüm kuyruklar üzerinde iterasyona girmekten çekinmeyin.
Devam etmeden önce bazı detaylar: IBM MQ, birden fazla yol ile kontrol edilebilir: MQSC, PCF, Kontrol Komutu. Genel listeler IBM MQ belgelerinde bulunabilir. PCF (Programlanabilir Komut Formatları) ile uzaktan örnekle etkileşimde bulunmaya odaklanıyoruz. punch-q ve ayrıca pymqi PCF etkileşimlerine dayanmaktadır.
PCF komutlarının bir listesini bulabilirsiniz:
İlginç bir komut
MQCMD_CREATE_SERVICE
ve belgeleri burada mevcuttur. BirStartCommand
argümanı alır ve bu, örneğin, örnekteki gibi yerel bir programa işaret eder:/bin/sh
.Belgelerde komutla ilgili bir uyarı da bulunmaktadır: "Dikkat: Bu komut, bir kullanıcının mqm yetkisi ile keyfi bir komut çalıştırmasına izin verir. Bu komutu kullanma hakkı verilirse, kötü niyetli veya dikkatsiz bir kullanıcı, sistemlerinize veya verilerinize zarar verecek bir hizmet tanımlayabilir; örneğin, gerekli dosyaları silerek."
Not: her zaman IBM MQ belgelerine (Yönetim Referansı) göre, hizmet oluşturma için eşdeğer MQSC komutunu çalıştırmak üzere
/admin/action/qmgr/{qmgrName}/mqsc
adresinde bir HTTP uç noktası da bulunmaktadır. Bu konu burada henüz ele alınmamıştır.
Uzaktan program yürütme için PCF ile hizmet oluşturma / silme punch-q ile yapılabilir:
Örnek 1
IBM MQ günlüklerinde, komutun başarıyla yürütüldüğünü okuyabilirsiniz:
Ayrıca, makinedeki mevcut programları sayabilirsiniz (burada /bin/doesnotexist
... mevcut değildir):
Programın başlatılmasının asenkron olduğunu unutmayın. Bu nedenle, istismarı kullanmak için ikinci bir öğeye ihtiyacınız var (ters shell için dinleyici, farklı hizmette dosya oluşturma, ağ üzerinden veri sızdırma ...)
Örnek 2
Kolay ters shell için, punch-q ayrıca iki ters shell yükü önerir:
Biri bash ile
Biri perl ile
Elbette execute
komutunu kullanarak özel bir tane oluşturabilirsiniz.
Bash için:
Perl için:
IBM MQ belgelerine göz atabilir ve punch-q'da uygulanmamış belirli PCF komutlarını test etmek için doğrudan pymqi python kütüphanesini kullanabilirsiniz.
Örnek:
Eğer sabit isimlerini bulamıyorsanız, IBM MQ belgelerine başvurabilirsiniz.
MQCMD_REFRESH_CLUSTER
için örnek (Onaltılık = 73).MQCA_CLUSTER_NAME
(Onaltılık = 2029) parametresine ihtiyaç duyar, bu*
olabilir (Dok: ):
IBM MQ davranışını ve istismarlarını test etmek istiyorsanız, Docker tabanlı bir yerel ortam kurabilirsiniz:
ibm.com ve cloud.ibm.com üzerinde bir hesabınızın olması.
Şu komutla konteynerleştirilmiş bir IBM MQ oluşturun:
Varsayılan olarak, kimlik doğrulama etkinleştirilmiştir, kullanıcı adı admin
ve şifre passw0rd
(Çevre değişkeni MQ_ADMIN_PASSWORD
). Burada, kuyruk yöneticisi adı MYQUEUEMGR
olarak ayarlanmıştır (değişken MQ_QMGR_NAME
).
IBM MQ'nun çalışır durumda olması ve portlarının açık olması gerekir:
IBM MQ docker görüntülerinin eski versiyonu şurada: https://hub.docker.com/r/ibmcom/mq/.