1414 - Pentesting IBM MQ
Osnovne informacije
IBM MQ je IBM tehnologija za upravljanje redovima poruka. Kao i druge tehnologije message broker-a, posvećena je primanju, skladištenju, obradi i klasifikaciji informacija između proizvođača i potrošača.
Prema podrazumevanim podešavanjima, izlaže IBM MQ TCP port 1414. Ponekad, HTTP REST API može biti izložen na portu 9443. Metrike (Prometheus) takođe mogu biti pristupljene preko TCP porta 9157.
IBM pruža obimnu tehničku dokumentaciju dostupnu na https://www.ibm.com/docs/en/ibm-mq.
Alati
Predloženi alat za jednostavno iskorišćavanje je punch-q, sa korišćenjem Docker-a. Alat aktivno koristi Python biblioteku pymqi
.
Za ručniji pristup, koristite Python biblioteku pymqi. Potrebne su IBM MQ zavisnosti.
Instalacija pymqi
Potrebno je instalirati i učitati IBM MQ zavisnosti:
Kreirajte nalog (IBMid) na https://login.ibm.com/.
Preuzmite IBM MQ biblioteke sa 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. Za Linux x86_64 to je 9.0.0.4-IBM-MQC-LinuxX64.tar.gz.
Dekompresujte (
tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz
).Pokrenite
sudo ./mqlicense.sh
da biste prihvatili uslove licenci.
Ako koristite Kali Linux, izmenite fajl
mqlicense.sh
: uklonite/komentarišite sledeće linije (između linija 105-110):
Instalirajte ove pakete:
Zatim, privremeno dodajte
.so
datoteke u LD:export LD_LIBRARY_PATH=/opt/mqm/lib64
, pre pokretanja drugih alata koji koriste ove zavisnosti.
Zatim možete klonirati projekat pymqi: on sadrži zanimljive delove koda, konstante, ... Ili možete direktno instalirati biblioteku sa: pip install pymqi
.
Korišćenje punch-q
Sa Dockerom
Jednostavno koristite: sudo docker run --rm -ti leonjza/punch-q
.
Bez Dockera
Klonirajte projekat punch-q zatim pratite uputstva za instalaciju (pip install -r requirements.txt && python3 setup.py install
).
Nakon toga, može se koristiti sa punch-q
komandom.
Enumeracija
Možete pokušati da nabrojite ime upravljača redom, korisnike, kanale i redove sa punch-q ili pymqi.
Upravljač redom
Ponekad, ne postoji zaštita protiv dobijanja imena upravljača redom:
Kanali
punch-q koristi internu (izmenjivu) listu reči da bi pronašao postojeće kanale. Primer korišćenja:
Dešava se da neki IBM MQ instanci prihvataju neautentifikovane MQ zahteve, pa --username / --password
nije potreban. Naravno, pristupna prava takođe mogu da variraju.
Čim dobijemo jedno ime kanala (ovde: DEV.ADMIN.SVRCONN
), možemo nabrojati sve ostale kanale.
Nabrojavanje se može obaviti sa ovim delom koda code/examples/dis_channels.py
iz pymqi biblioteke:
... Ali punch-q takođe uključuje tu opciju (sa više informacija!). Može se pokrenuti sa:
Redovi
Postoji odlomak koda sa pymqi (dis_queues.py
), ali punch-q omogućava dobijanje više informacija o redovima:
Exploit
Dumpiranje poruka
Možete ciljati red(ove)/kanal(e) kako biste ih špijunirali i dumpovali poruke iz njih (operacija bez uništavanja). Primeri:
Nemojte se ustručavati da iterirate kroz sve identifikovane redove.
Izvršenje koda
Neke detalje pre nego što nastavimo: IBM MQ se može kontrolisati na više načina: MQSC, PCF, Control Command. Neke opšte liste mogu se pronaći u IBM MQ dokumentaciji. PCF (Programmable Command Formats) je ono na čemu se fokusiramo kako bismo interaktovali udaljeno sa instancom. punch-q i dalje pymqi se baziraju na PCF interakcijama.
Možete pronaći listu PCF komandi:
Jedna interesantna komanda je
MQCMD_CREATE_SERVICE
i njena dokumentacija je dostupna ovde. Kao argument, uzimaStartCommand
koji pokazuje na lokalni program na instanci (primer:/bin/sh
).Takođe postoji upozorenje o ovoj komandi u dokumentaciji: "Pažnja: Ova komanda omogućava korisniku da pokrene proizvoljnu komandu sa mqm ovlašćenjem. Ako su dodeljena prava za korišćenje ove komande, zlonameran ili nepažljiv korisnik može definisati servis koji oštećuje vaš sistem ili podatke, na primer, brisanjem bitnih fajlova."
Napomena: uvek prema IBM MQ dokumentaciji (Administrativni referentni materijal), takođe postoji HTTP endpoint na
/admin/action/qmgr/{qmgrName}/mqsc
za pokretanje ekvivalentne MQSC komande za kreiranje servisa (DEFINE SERVICE
). Ovaj aspekt još uvek nije obuhvaćen ovde.
Kreiranje / brisanje servisa sa PCF za izvršavanje udaljenog programa može se obaviti pomoću punch-q:
Primer 1
U zapisima IBM MQ-a možete pročitati da je komanda uspešno izvršena:
Takođe možete nabrojati postojeće programe na mašini (ovde /bin/doesnotexist
... ne postoji):
Imajte na umu da je pokretanje programa asinhrono. Dakle, potrebna vam je druga stavka da biste iskoristili ranjivost (slušalica za obrnutu ljusku, kreiranje datoteke na drugoj usluzi, eksfiltracija podataka putem mreže...)
Primer 2
Za jednostavnu obrnutu ljusku, punch-q takođe nudi dva payloada za obrnutu ljusku:
Jedan sa bashom
Jedan sa perlom
Naravno, možete napraviti prilagođeni payload pomoću komande execute
.
Za bash:
Za perl:
Prilagođeni PCF
Možete istražiti IBM MQ dokumentaciju i direktno koristiti pymqi Python biblioteku da biste testirali određenu PCF komandu koja nije implementirana u punch-q.
Primer:
Ako ne možete pronaći imena konstanti, možete se referisati na IBM MQ dokumentaciju.
Primer za
MQCMD_REFRESH_CLUSTER
(Decimalno = 73). Potrebno je koristiti parametarMQCA_CLUSTER_NAME
(Decimalno = 2029) koji može biti*
(Dokumentacija: ):
Testno okruženje
Ako želite testirati ponašanje i eksploatacije IBM MQ, možete postaviti lokalno okruženje zasnovano na Dockeru:
Imajte nalog na ibm.com i cloud.ibm.com.
Kreirajte kontejnerizovani IBM MQ sa:
Podrazumevano, autentifikacija je omogućena, korisničko ime je admin
, a lozinka je passw0rd
(promenljiva okruženja MQ_ADMIN_PASSWORD
). Ovde je ime menadžera redova postavljeno na MYQUEUEMGR
(promenljiva MQ_QMGR_NAME
).
IBM MQ treba da bude pokrenut i da ima otvorene portove.
Stare verzije IBM MQ Docker slika se nalaze na: https://hub.docker.com/r/ibmcom/mq/.
Reference
Last updated