8.1 KiB
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 kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve 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"
}
Brute-Force 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 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 adresini kullanabilirsiniz.
Ayrıca şunu da kullanabilirsiniz:
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:
#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
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
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'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family koleksiyonumuzdaki özel NFT'leri keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da takip edin 🐦 @carlospolopm.
- Hacking hilelerinizi paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.