1414 - Pentesting IBM MQ
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:
HackTricks Training GCP Red Team Expert (GRTE)
Temel bilgiler
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.
Araçlar
Kolay sömürü için önerilen bir araç punch-q, Docker kullanımı ile. Araç, pymqi
Python kütüphanesini aktif olarak kullanmaktadır.
Daha manuel bir yaklaşım için, pymqi Python kütüphanesini kullanın. IBM MQ bağımlılıkları gereklidir.
pymqi Kurulumu
IBM MQ bağımlılıkları kurulmalı ve yüklenmelidir:
https://login.ibm.com/ adresinde bir hesap (IBMid) oluşturun.
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 IBM MQ kütüphanelerini 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 kullanıyorsanız,
mqlicense.sh
dosyasını değiştirin: aşağıdaki satırları (105-110. satırlar arasında) kaldırın/yorumlayın:
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 komutla kurabilirsiniz: pip install pymqi
.
punch-q Kullanımı
Docker ile
Basitçe şunu kullanın: sudo docker run --rm -ti leonjza/punch-q
.
Docker olmadan
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.
Sayım
Queue manager adı, kullanıcılar, kanallar ve kuyruklar'ı punch-q veya pymqi ile saymayı deneyebilirsiniz.
Queue Manager
Bazen, Queue Manager adını elde etmeye karşı bir koruma yoktur:
Kanallar
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şiklik 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:
Kuyruklar
pymqi ile bir kod parçası var (dis_queues.py
) ama punch-q kuyruklar hakkında daha fazla bilgi parçası almayı sağlar:
Exploit
Dump messages
Queue(lar)/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.
Kod yürütme
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.
PCF ile uzaktan program yürütme için 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 kabuk için dinleyici, farklı hizmette dosya oluşturma, ağ üzerinden veri sızdırma ...)
Örnek 2
Kolay ters kabuk için, punch-q ayrıca iki ters kabuk yükü önerir:
Biri bash ile
Biri perl ile
Elbette execute
komutunu kullanarak özel bir tane oluşturabilirsiniz.
Bash için:
For perl:
Özel PCF
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
(Ondalık = 73) için örnek.MQCA_CLUSTER_NAME
(Ondalık = 2029) parametresine ihtiyaç duyar, bu*
olabilir (Dok: ):
Test ortamı
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ı.
Aşağıdaki ile konteynerleştirilmiş bir IBM MQ oluşturun:
Varsayılan olarak, kimlik doğrulama etkinleştirilmiştir, kullanıcı adı admin
ve şifre passw0rd
(Ortam 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/.
References
Last updated