# 1883 - MQTT (Mosquitto) Pentesting
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin! HackTricks'ı desteklemenin diğer yolları: * **Şirketinizi HackTricks'te reklam vermek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**. * **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
## Temel Bilgiler **MQ Telemetry Transport (MQTT)**, aşırı basitlik ve hafiflik özellikleriyle öne çıkan bir **yayın/abonelik mesajlaşma protokolü** olarak bilinir. Bu protokol, sınırlı yeteneklere sahip cihazların ve düşük bant genişliği, yüksek gecikme süresi veya güvenilmez bağlantılara sahip ağlarda çalışan cihazların bulunduğu ortamlar için özel olarak tasarlanmıştır. MQTT'nin temel hedefleri arasında ağ bant genişliğinin en aza indirilmesi ve cihaz kaynaklarına olan talebin azaltılması bulunur. Ayrıca, güvenilir iletişimin sürdürülmesi ve belirli bir teslimat güvencesi sağlanması amaçlanır. Bu hedefler, MQTT'yi **makine-makine (M2M) iletişimi** ve **nesnelerin interneti (IoT)** alanında son derece uygun hale getirir, burada birçok cihazın verimli bir şekilde bağlanması önemlidir. Ayrıca, MQTT, bant genişliğini ve pil ömrünü korumanın önemli olduğu mobil uygulamalar için de son derece faydalıdır. **Varsayılan port:** 1883 ``` PORT STATE SERVICE REASON 1883/tcp open mosquitto version 1.4.8 syn-ack ``` ## Trafik incelemesi MQTT brokerlarına bir **CONNECT** paketi geldiğinde, bir **CONNACK** paketi geri gönderilir. Bu paket, bağlantı durumunu anlamak için önemli olan bir dönüş kodu içerir. **0x00** dönüş kodu, kimlik bilgilerinin kabul edildiğini ve başarılı bir bağlantıyı gösterir. Öte yandan, **0x05** dönüş kodu, kimlik bilgilerinin geçersiz olduğunu ve dolayısıyla bağlantının engellendiğini belirtir. Örneğin, broker geçersiz kimlik bilgileri nedeniyle bağlantıyı reddederse, senaryo şu şekilde görünecektir: ``` { "returnCode": "0x05", "description": "Connection Refused, not authorized" } ``` ![](<../.gitbook/assets/image (645) (1).png>) ### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt) ## MQTT Pentesting **Kimlik doğrulama tamamen isteğe bağlıdır** ve hatta kimlik doğrulama yapılsa bile, **varsayılan olarak şifreleme kullanılmaz** (kimlik bilgileri açık metin olarak gönderilir). MITM saldırıları hala gerçekleştirilebilir ve şifreleri çalmak için kullanılabilir. Bir MQTT hizmetine bağlanmak için şunu kullanabilirsiniz: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) ve tüm konulara kendinizi abone yapmak için: ``` > connect (NOTICE that you need to indicate before this the params of the connection, by default 127.0.0.1:1883) > subscribe "#" 1 > subscribe "$SYS/#" ``` Ayrıca [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn) adresini kullanabilirsiniz. Ayrıca şunu da kullanabilirsiniz: ```bash apt-get install mosquitto mosquitto-clients mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic' ``` Ya da **bu kodu çalıştırarak kimlik doğrulaması olmadan bir MQTT servisine bağlanmayı deneyebilir, her konuya abone olabilir ve onları dinleyebilirsiniz**: ```python #This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py import paho.mqtt.client as mqtt import time import os HOST = "127.0.0.1" PORT = 1883 def on_connect(client, userdata, flags, rc): client.subscribe('#', qos=1) client.subscribe('$SYS/#') def on_message(client, userdata, message): print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload)) def main(): client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect(HOST, PORT) client.loop_start() #time.sleep(10) #client.loop_stop() if __name__ == "__main__": main() ``` ## Daha Fazla Bilgi buradan: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b) ### Yayın/Abonelik Modeli Yayın/abonelik modeli şunlardan oluşur: * **Yayıncı**: mesajı broker'a bir (veya birçok) konuya yayınlar. * **Abone**: broker'da bir (veya birçok) konuya abone olur ve yayıncıdan gönderilen tüm mesajları alır. * **Broker**: yayıncıların mesajlarını abonelere yönlendirir. * **Konu**: bir veya daha fazla seviyeden oluşur ve bir ileri eğik çizgi (/) ile ayrılır (örneğin, /akıllıev/salon/sıcaklık). ### Paket Formatı Her MQTT paketi bir sabit başlık içerir (Şekil 02). Şekil 02: Sabit Başlık ![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png) ### Paket Türleri * CONNECT (1): İstemcinin sunucuya bağlantı isteği yapması. * CONNACK (2): Başarılı bir bağlantının sunucu tarafından onaylanması. * PUBLISH (3): İstemcinin sunucuya veya sunucunun istemciye bir mesaj göndermek için kullanılması. * PUBACK (4): Bir PUBLISH paketinin onaylanması. * PUBREC (5): Mesajın alındığını sağlayan bir ileti teslim protokolünün bir parçası. * PUBREL (6): Mesaj teslimatında daha fazla güvence sağlayan, bir mesajın serbest bırakılmasını gösteren. * PUBCOMP (7): İleti teslimat protokolünün son bölümü, tamamlamayı gösteren. * SUBSCRIBE (8): Bir istemcinin bir konudan gelen mesajları dinlemek için istekte bulunması. * SUBACK (9): SUBSCRIBE isteğinin sunucu tarafından onaylanması. * UNSUBSCRIBE (10): Bir istemcinin bir konudan mesaj almamak için istekte bulunması. * UNSUBACK (11): UNSUBSCRIBE isteğine sunucunun yanıtı. * PINGREQ (12): İstemci tarafından gönderilen bir kalp atışı mesajı. * PINGRESP (13): Sunucunun kalp atışı mesajına yanıtı. * DISCONNECT (14): İstemcinin bağlantıyı sonlandırmak için başlatması. * 0 ve 15 olarak işaretlenen iki değer, rezerve edilmiştir ve kullanımları yasaktır. ## Shodan * `port:1883 MQTT`
AWS hacklemeyi sıfırdan kahraman olmak için öğrenin htARTE (HackTricks AWS Red Team Expert)! HackTricks'ı desteklemenin diğer yolları: * Şirketinizi HackTricks'te **reklam vermek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzdaki özel [**NFT'leri**](https://opensea.io/collection/the-peass-family) keşfedin * 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live). * Hacking hilelerinizi paylaşarak **PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.