1414 - Pentesting IBM MQ
Temel bilgiler
IBM MQ, mesaj kuyruklarını yönetmek için kullanılan 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 kullanılır.
Varsayılan olarak, IBM MQ TCP bağlantı noktası 1414 olarak açılır. Bazen, HTTP REST API bağlantı noktası 9443 üzerinde açılabilir. Metrikler (Prometheus) TCP bağlantı noktası 9157 üzerinden erişilebilir.
IBM MQ TCP bağlantı noktası 1414, mesajları, kuyrukları, kanalları vb. manipüle etmek için kullanılabilir, ancak aynı zamanda örneği kontrol etmek için de kullanılabilir.
IBM, https://www.ibm.com/docs/en/ibm-mq adresinde geniş bir teknik belge sağlamaktadır.
Araçlar
Kolay sömürü için önerilen bir araç punch-q, Docker kullanımıyla. Araç, Python kütüphanesi pymqi
'yi aktif olarak kullanmaktadır.
Daha manuel bir yaklaşım için, Python kütüphanesi pymqi kullanın. IBM MQ bağımlılıkları gereklidir.
pymqi'nin kurulumu
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.
Arşivi açın (
tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz
).Lisans koşullarını kabul etmek için
sudo ./mqlicense.sh
komutunu çalıştırın.
Eğer Kali Linux altındaysanız,
mqlicense.sh
dosyasını düzenleyin: aşağıdaki satırları (105-110 arasındaki satırlar) 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
, bu bağımlılıkları kullanan diğer araçları çalıştırmadan önce.
Daha sonra, pymqi projesini klonlayabilirsiniz: ilginç kod parçacıkları, sabitler içerir... Veya doğrudan kütüphaneyi şu komutla yükleyebilirsiniz: pip install pymqi
.
punch-q Kullanımı
Docker ile
Basitçe şunu kullanın: sudo docker run --rm -ti leonjza/punch-q
.
Docker olmadan
punch-q projesini klonlayın ve ardından kurulum için readme'yi takip edin (pip install -r requirements.txt && python3 setup.py install
).
Sonra, punch-q
komutuyla kullanılabilir.
Numaralandırma
punch-q veya pymqi ile kuyruk yöneticisi adını, kullanıcıları, kanalları ve kuyrukları numaralandırmayı deneyebilirsiniz.
Kuyruk Yöneticisi
Bazen, Kuyruk Yöneticisi adını almak için herhangi bir koruma olmayabilir:
Kanallar
punch-q, mevcut kanalları bulmak için dahili (değiştirilebilir) bir kelime listesi kullanır. Kullanım örneği:
Bazı IBM MQ örnekleri, kimlik doğrulaması yapılmamış MQ isteklerini kabul eder, bu yüzden --username / --password
gerekmez. Tabii ki, erişim hakları da değişebilir.
Bir kanal adı (burada: DEV.ADMIN.SVRCONN
) elde ettiğimiz anda, diğer tüm kanalları sıralayabiliriz.
Sıralama temel olarak pymqi'den bu kod parçacığı code/examples/dis_channels.py
ile yapılabilir:
... Ancak punch-q ayrıca bu bölümü de içerir (daha fazla bilgiyle!). Aşağıdaki komutla başlatılabilir:
Bu komut, IBM MQ sunucusuna karşı bir saldırı gerçekleştirmek için kullanılır.
Kuyruklar
pymqi ile ilgili bir kod parçacığı (dis_queues.py
) bulunmaktadır, ancak punch-q kuyruklar hakkında daha fazla bilgi almayı sağlar:
Exploit
Mesajları Dump Etme
Belirli bir kuyruğa/kanala hedef alarak, mesajları onlardan çalmak/dump etmek mümkündür (yıkıcı olmayan işlem). Örnekler:
Tüm belirlenen kuyruklarda tekrarlamaktan çekinmeyin.
Kod yürütme
Devam etmeden önce bazı detaylar: IBM MQ birden fazla şekilde kontrol edilebilir: MQSC, PCF, Kontrol Komutu. Bazı genel listeler IBM MQ belgelerinde bulunabilir. PCF (Programlanabilir Komut Biçimleri) uzaktan örnekle etkileşimde bulunmak için odaklandığımız şeydir. punch-q ve daha da önemlisi pymqi PCF etkileşimlerine dayanır.
PCF komutlarının bir listesini bulabilirsiniz:
İlginç bir komut
MQCMD_CREATE_SERVICE
ve belgeleri burada bulunabilir. Argüman olarak, örneğin (/bin/sh
) örneğinde olduğu gibi, örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekteki örnekte
IBM MQ günlüklerinde, komutun başarıyla çalıştırıldığını okuyabilirsiniz:
Ayrıca, makinedeki mevcut programları da sıralayabilirsiniz (burada /bin/doesnotexist
... mevcut değil):
Dikkat edin, program başlatma işlemi asenkron olarak gerçekleşir. Bu nedenle, saldırıyı kullanmak için ikinci bir öğeye ihtiyacınız vardır (ters kabuk için dinleyici, farklı bir hizmette dosya oluşturma, ağ üzerinden veri sızdırma...)
Örnek 2
Kolay bir ters kabuk için, punch-q ayrıca iki ters kabuk yükü de sunar:
Bir tanesi bash ile
Bir tanesi perl ile
Tabii ki, execute
komutuyla özel bir tane oluşturabilirsiniz.
Bash için:
Perl için:
Özel PCF
IBM MQ belgelerine derinlemesine inceleyebilir ve belirli bir PCF komutunu test etmek için pymqi python kütüphanesini doğrudan kullanabilirsiniz. Bu, punch-q tarafından uygulanmayan özel bir PCF komutunu test etmek için kullanılabilir.
Örnek:
Eğer sabit isimleri bulamazsanız, IBM MQ belgelerine başvurabilirsiniz.
Örnek için
MQCMD_REFRESH_CLUSTER
(Ondalık = 73).MQCA_CLUSTER_NAME
(Ondalık = 2029) parametresine ihtiyaç duyar, bu da*
olabilir (Belge: ):
Test ortamı
IBM MQ davranışını ve zafiyetleri test etmek isterseniz, Docker tabanlı yerel bir ortam kurabilirsiniz:
ibm.com ve cloud.ibm.com üzerinde bir hesaba sahip olun.
IBM MQ'yu bir konteyner üzerinde 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
) olarak ayarlanmıştır. Burada, kuyruk yöneticisi adı MYQUEUEMGR
(değişken MQ_QMGR_NAME
) olarak ayarlanmıştır.
IBM MQ'nun çalışır durumda olması ve bağlantı noktalarının açık olması gerekmektedir:
IBM MQ docker görüntülerinin eski sürümü şurada bulunabilir: https://hub.docker.com/r/ibmcom/mq/.
Referanslar
Last updated