8.2 KiB
1883 - MQTT (Mosquitto) Pentesting
AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.**
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Temel Bilgiler
MQ Telemetry Transport (MQTT), aşırı basitlik ve hafiflik açısından öne çıkan bir yayın/abone mesajlaşma protokolü olarak bilinir. Bu protokol özellikle, cihazların sınırlı kapasitelere sahip olduğu ve düşük bant genişliği, yüksek gecikme süresi veya güvenilir olmayan bağlantılarla karakterize edilen ağlarda çalıştığı ortamlar için özel olarak tasarlanmıştır. MQTT'nin temel hedefleri arasında ağ bant genişliğinin kullanımını en aza indirgeme ve cihaz kaynaklarına olan talebi azaltma yer alır. Ayrıca, güvenilir iletişimi sürdürmeyi ve belirli bir teslimat güvencesi düzeyi sağlamayı amaçlar. Bu hedefler, MQTT'yi makine-makine (M2M) iletişimi ve Nesnelerin İnterneti (IoT) alanı için son derece uygun hale getirir, burada birçok cihazın verimli bir şekilde bağlanması esastır. Ayrıca, MQTT, bant genişliğini ve pil ömrünü korumanın önemli olduğu mobil uygulamalar için son derece faydalıdır.
Varsayılan port: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
Trafik İnceleniyor
MQTT brokerları tarafından bir CONNECT paketi alındığında, 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 şöyle 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ğrulaması yapılıyorsa varsayılan olarak şifreleme kullanılmaz (kimlik bilgileri düz metin olarak gönderilir). MITM saldırıları hala gerçekleştirilerek şifreler çalınabilir.
MQTT hizmetine bağlanmak için şu adımları kullanabilirsiniz: https://github.com/bapowell/python-mqtt-client-shell ve tüm konulara kendinizi abone yapabilirsiniz:
> 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.
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic'
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.
Ya da bu kodu çalıştırabilirsiniz kimlik doğrulaması olmadan bir MQTT servisine bağlanmayı denemek için, 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/Abone Olma Modeli
Yayın/abone olma modeli şunlardan oluşur:
- Yayıncı: bir mesajı broker'daki bir veya birden fazla konuya yayınlar.
- Abone: broker'daki bir veya birden fazla konuya abone olur ve yayıncıdan gönderilen tüm mesajları alır.
- Broker: yayıncılardan gelen tüm mesajları abonelere yönlendirir.
- Konu: bir veya daha fazla seviyeden oluşur ve bir ileri eğik çizgi ile ayrılır (örneğin, /smartshouse/livingroom/temperature).
Paket Formatı
Her MQTT paketi sabit bir başlık içerir (Şekil 02). Şekil 02: Sabit Başlık
Paket Türleri
- CONNECT (1): İstemci tarafından sunucuya bağlantı istemek için başlatılır.
- CONNACK (2): Başarılı bir bağlantının sunucu tarafından onaylanması.
- PUBLISH (3): İstemciden sunucuya veya tersine bir mesaj göndermek için kullanılır.
- PUBACK (4): Bir PUBLISH paketinin onaylanması.
- PUBREC (5): Mesajın alındığından emin olmak için bir iletişim protokolünün parçası.
- PUBREL (6): Mesaj iletiminde daha fazla güvence sağlayarak bir mesajın serbest bırakılmasını gösterir.
- PUBCOMP (7): İletişim protokolünün final kısmı, tamamlamayı gösterir.
- SUBSCRIBE (8): Bir istemcinin bir konudan mesajları dinlemek için isteği.
- SUBACK (9): SUBSCRIBE isteğinin sunucu tarafından onaylanması.
- UNSUBSCRIBE (10): Bir istemcinin bir konudan mesaj almaya son vermek için isteği.
- 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): Bağlantıyı sonlandırmak için istemci tarafından başlatılır.
- 0 ve 15 olarak işaretlenen iki değer yasaklanmıştır ve kullanılmaları yasaktır.
Shodan
port:1883 MQTT
Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family koleksiyonumuzu keşfedin, özel NFT'lerimiz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da 🐦 @carlospolopm takip edin.
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.