hacktricks/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md

168 lines
9.2 KiB
Markdown
Raw Normal View History

# 1883 - Pentesting MQTT (Mosquitto)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2022-04-28 16:01:33 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), bir şirketin veya müşterilerinin **stealer malwares** tarafından **tehdit edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık ağ** destekli bir arama motorudur.
WhiteIntel'in temel amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Web sitelerini kontrol edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
***
2024-02-10 18:14:16 +00:00
## Temel Bilgiler
**MQ Telemetry Transport (MQTT)**, aşırı basitliği ve hafifliği ile öne çıkan bir **yayın/abone mesajlaşma protokolü** olarak bilinir. Bu protokol, cihazların sınırlı yeteneklere sahip olduğu ve düşük bant genişliği, yüksek gecikme veya güvenilmez bağlantılarla karakterize edilen ağlar üzerinde çalıştığı ortamlara özel olarak tasarlanmıştır. MQTT'nin temel hedefleri, ağ bant genişliği kullanımını en aza indirmek ve cihaz kaynakları üzerindeki talebi azaltmaktır. Ayrıca, güvenilir iletişimi sürdürmeyi ve belirli bir teslimat güvencesi sağlamayı amaçlar. Bu hedefler, MQTT'yi **makine-makine (M2M) iletişimi** ve **Nesnelerin İnterneti (IoT)** alanında son derece uygun hale getirir; burada çok sayıda cihazı verimli bir şekilde bağlamak esastır. Ayrıca, MQTT, bant genişliğini ve pil ömrünü korumanın kritik olduğu mobil uygulamalar için de son derece faydalıdır.
2024-02-10 18:14:16 +00:00
**Varsayılan port:** 1883
```
2020-09-24 18:58:31 +00:00
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
## Trafiğin İncelenmesi
2020-09-24 18:58:31 +00:00
Bir **CONNECT** paketi MQTT brokerları tarafından alındığında, bir **CONNACK** paketi geri gönderilir. Bu paket, bağlantı durumunu anlamak için kritik olan bir dönüş kodu içerir. **0x00** dönüş kodu, kimlik bilgilerin kabul edildiğini ve başarılı bir bağlantıyı gösterir. Öte yandan, **0x05** dönüş kodu, kimlik bilgilerin geçersiz olduğunu belirterek bağlantıyı engeller.
2024-02-08 21:36:35 +00:00
Örneğin, broker kimlik bilgilerin geçersiz olması nedeniyle bağlantıyı reddederse, senaryo şöyle görünür:
2024-02-08 21:36:35 +00:00
```
{
2024-02-10 18:14:16 +00:00
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
2024-02-08 21:36:35 +00:00
}
```
![](<../.gitbook/assets/image (976).png>)
2022-02-19 19:42:58 +00:00
2022-08-12 14:24:34 +00:00
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
2022-02-19 19:42:58 +00:00
## Pentesting MQTT
**Kimlik doğrulama tamamen isteğe bağlıdır** ve kimlik doğrulama gerçekleştiriliyor olsa bile, **şifreleme varsayılan olarak kullanılmamaktadır** (kimlik bilgileri düz metin olarak gönderilir). MITM saldırıları hala şifreleri çalmak için gerçekleştirilebilir.
Bir MQTT hizmetine bağlanmak için şunları kullanabilirsiniz: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) ve tüm konulara abone olmak 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 şunu da kullanabilirsiniz:
2022-02-19 19:42:58 +00:00
```bash
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.
2022-02-19 19:42:58 +00:00
```
Ya da **bu kodu çalıştırarak bir MQTT hizmetine kimlik doğrulaması olmadan bağlanmayı, her konuya abone olmayı ve dinlemeyi deneyebilirsiniz**:
```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):
2024-02-10 18:14:16 +00:00
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')
def on_message(client, userdata, message):
2024-02-10 18:14:16 +00:00
print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload))
def main():
2024-02-10 18:14:16 +00:00
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__":
2024-02-10 18:14:16 +00:00
main()
```
## Daha fazla bilgi
2024-02-10 18:14:16 +00:00
buradan: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
### Yayınlama/Abone Olma Modeli <a href="#b667" id="b667"></a>
Yayınlama/abone olma modeli şunlardan oluşur:
* **Yayıncı**: bir (veya birden fazla) konuya broker'da bir mesaj yayınlar.
* **Abone**: broker'da bir (veya birden fazla) konuya abone olur ve yayıncıdan gönderilen tüm mesajları alır.
* **Broker**: yayıncılardan abonelere tüm mesajları yönlendirir.
* **Konu**: bir veya daha fazla seviyeden oluşur ve bu seviyeler bir eğik çizgi ile ayrılır (örneğin, /smartshouse/livingroom/temperature).
2024-02-10 18:14:16 +00:00
### Paket Formatı <a href="#f15a" id="f15a"></a>
Her MQTT paketi sabit bir başlık içerir (Şekil 02). Şekil 02: Sabit Başlık
2024-02-08 21:36:35 +00:00
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
2024-02-10 18:14:16 +00:00
### Paket Türleri
* CONNECT (1): Sunucuya bağlantı talep etmek için istemci tarafından başlatılır.
* CONNACK (2): Sunucunun başarılı bir bağlantıyı onaylaması.
* PUBLISH (3): İstemciden sunucuya veya tersine bir mesaj göndermek için kullanılır.
* PUBACK (4): PUBLISH paketinin onayı.
* PUBREC (5): Mesajın alındığını garanti eden bir mesaj teslim protokolünün parçası.
* PUBREL (6): Mesaj tesliminde daha fazla güvence, bir mesajın serbest bırakıldığını gösterir.
* PUBCOMP (7): Mesaj teslim protokolünün son kısmı, tamamlandığını gösterir.
* SUBSCRIBE (8): Bir konudan mesaj dinlemek için istemcinin talebi.
* SUBACK (9): Sunucunun bir SUBSCRIBE talebini onaylaması.
* UNSUBSCRIBE (10): Bir konudan mesaj almaktan vazgeçmek için istemcinin talebi.
* UNSUBACK (11): Sunucunun bir UNSUBSCRIBE talebine yanıtı.
* PINGREQ (12): İstemci tarafından gönderilen bir kalp atışı mesajı.
* PINGRESP (13): Kalp atışı mesajına sunucunun yanıtı.
* DISCONNECT (14): Bağlantıyı sonlandırmak için istemci tarafından başlatılır.
* 0 ve 15 değerleri, ayrılmış olarak işaretlenmiştir ve kullanımları yasaktır.
2020-09-21 23:14:27 +00:00
2022-08-12 14:24:34 +00:00
## Shodan
2020-09-21 23:14:27 +00:00
* `port:1883 MQTT`
2022-04-28 16:01:33 +00:00
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) **karanlık ağ** destekli bir arama motorudur ve bir şirketin veya müşterilerinin **tehdit altına alınıp alınmadığını** kontrol etmek için **ücretsiz** işlevler sunar.
WhiteIntel'in ana hedefi, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Web sitelerini kontrol edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2022-04-28 16:01:33 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}