mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
169 lines
12 KiB
Markdown
169 lines
12 KiB
Markdown
# 1883 - Pentesting MQTT (Mosquitto)
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<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">\
|
||
Learn & practice GCP Hacking: <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)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
### [WhiteIntel](https://whiteintel.io)
|
||
|
||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
[**WhiteIntel**](https://whiteintel.io) є **пошуковою системою**, що працює на основі **темного вебу**, яка пропонує **безкоштовні** функції для перевірки, чи була компанія або її клієнти **компрометовані** **шкідливими програмами-крадіями**.
|
||
|
||
Основною метою WhiteIntel є боротьба з захопленням облікових записів та атаками програм-вимагачів, що виникають внаслідок шкідливих програм, які крадуть інформацію.
|
||
|
||
Ви можете перевірити їхній вебсайт і спробувати їхній двигун **безкоштовно** за адресою:
|
||
|
||
{% embed url="https://whiteintel.io" %}
|
||
|
||
***
|
||
|
||
## Basic Information
|
||
|
||
**MQ Telemetry Transport (MQTT)** відомий як **протокол обміну повідомленнями з публікацією/підпискою**, який вирізняється своєю надзвичайною простотою та легкістю. Цей протокол спеціально розроблений для середовищ, де пристрої мають обмежені можливості та працюють через мережі, які характеризуються низькою пропускною здатністю, високою затримкою або ненадійними з'єднаннями. Основні цілі MQTT включають мінімізацію використання мережевої пропускної здатності та зменшення навантаження на ресурси пристроїв. Крім того, він прагне підтримувати надійний зв'язок і забезпечувати певний рівень гарантії доставки. Ці цілі роблять MQTT надзвичайно придатним для зростаючої сфери **взаємодії між машинами (M2M)** та **Інтернету речей (IoT)**, де важливо ефективно з'єднувати безліч пристроїв. Більше того, MQTT є дуже корисним для мобільних додатків, де збереження пропускної здатності та заряду батареї є критично важливим.
|
||
|
||
**Default port:** 1883
|
||
```
|
||
PORT STATE SERVICE REASON
|
||
1883/tcp open mosquitto version 1.4.8 syn-ack
|
||
```
|
||
## Інспекція трафіку
|
||
|
||
When a **CONNECT** packet is received by MQTT brokers, a **CONNACK** packet is sent back. This packet contains a return code which is crucial for understanding the connection status. A return code of **0x00** means that the credentials have been accepted, signifying a successful connection. On the other hand, a return code of **0x05** signals that the credentials are invalid, thus preventing the connection.
|
||
|
||
For instance, if the broker rejects the connection due to invalid credentials, the scenario would look something like this:
|
||
```
|
||
{
|
||
"returnCode": "0x05",
|
||
"description": "Connection Refused, not authorized"
|
||
}
|
||
```
|
||
![](<../.gitbook/assets/image (976).png>)
|
||
|
||
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
|
||
|
||
## Pentesting MQTT
|
||
|
||
**Аутентифікація є абсолютно необов'язковою** і навіть якщо аутентифікація виконується, **шифрування за замовчуванням не використовується** (облікові дані надсилаються у відкритому тексті). Атаки MITM все ще можуть бути виконані для викрадення паролів.
|
||
|
||
Щоб підключитися до служби MQTT, ви можете використовувати: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) і підписатися на всі теми, виконавши:
|
||
```
|
||
> 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/#"
|
||
```
|
||
Ви також можете використовувати [**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn)
|
||
|
||
Ви також можете використовувати:
|
||
```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.
|
||
```
|
||
Або ви можете **виконати цей код, щоб спробувати підключитися до служби MQTT без аутентифікації, підписатися на всі теми та слухати їх**:
|
||
```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()
|
||
```
|
||
## Більше інформації
|
||
|
||
звідси: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
|
||
|
||
### Патерн Публікації/Підписки <a href="#b667" id="b667"></a>
|
||
|
||
Модель публікації/підписки складається з:
|
||
|
||
* **Публікатор**: публікує повідомлення в одну (або кілька) теми в брокері.
|
||
* **Підписник**: підписується на одну (або кілька) теми в брокері та отримує всі повідомлення, надіслані публікатором.
|
||
* **Брокер**: маршрутизує всі повідомлення від публікаторів до підписників.
|
||
* **Тема**: складається з одного або кількох рівнів, які розділені косою рискою (наприклад, /smartshouse/livingroom/temperature).
|
||
|
||
### Формат Пакета <a href="#f15a" id="f15a"></a>
|
||
|
||
Кожен пакет MQTT містить фіксований заголовок (Рисунок 02). Рисунок 02: Фіксований Заголовок
|
||
|
||
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png)
|
||
|
||
### Типи Пакетів
|
||
|
||
* CONNECT (1): Ініційований клієнтом для запиту з'єднання з сервером.
|
||
* CONNACK (2): Підтвердження сервера про успішне з'єднання.
|
||
* PUBLISH (3): Використовується для надсилання повідомлення від клієнта до сервера або навпаки.
|
||
* PUBACK (4): Підтвердження пакета PUBLISH.
|
||
* PUBREC (5): Частина протоколу доставки повідомлень, що забезпечує отримання повідомлення.
|
||
* PUBREL (6): Додаткове підтвердження доставки повідомлення, що вказує на звільнення повідомлення.
|
||
* PUBCOMP (7): Остання частина протоколу доставки повідомлень, що вказує на завершення.
|
||
* SUBSCRIBE (8): Запит клієнта на прослуховування повідомлень з теми.
|
||
* SUBACK (9): Підтвердження сервера про запит SUBSCRIBE.
|
||
* UNSUBSCRIBE (10): Запит клієнта на припинення отримання повідомлень з теми.
|
||
* UNSUBACK (11): Відповідь сервера на запит UNSUBSCRIBE.
|
||
* PINGREQ (12): Повідомлення про серцебиття, надіслане клієнтом.
|
||
* PINGRESP (13): Відповідь сервера на повідомлення про серцебиття.
|
||
* DISCONNECT (14): Ініційований клієнтом для завершення з'єднання.
|
||
* Два значення, 0 і 15, позначені як зарезервовані, і їх використання заборонено.
|
||
|
||
## Shodan
|
||
|
||
* `port:1883 MQTT`
|
||
|
||
### [WhiteIntel](https://whiteintel.io)
|
||
|
||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
[**WhiteIntel**](https://whiteintel.io) є **пошуковою системою** на основі **темного вебу**, яка пропонує **безкоштовні** функції для перевірки, чи була **компанія** або її клієнти **компрометовані** **шкідливими програмами**.
|
||
|
||
Їхня основна мета - боротися з захопленнями облікових записів та атаками програм-вимагачів, що виникають внаслідок шкідливих програм, що крадуть інформацію.
|
||
|
||
Ви можете перевірити їхній вебсайт і спробувати їхній двигун **безкоштовно** за адресою:
|
||
|
||
{% embed url="https://whiteintel.io" %}
|
||
|
||
{% hint style="success" %}
|
||
Вчіться та практикуйте Hacking AWS:<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">\
|
||
Вчіться та практикуйте Hacking GCP: <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)
|
||
|
||
<details>
|
||
|
||
<summary>Підтримати HackTricks</summary>
|
||
|
||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
|
||
|
||
</details>
|
||
{% endhint %}
|