# 1883 - Pentesting MQTT (Mosquitto)
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASS&HackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する
- **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
## 基本情報
**MQ Telemetry Transport (MQTT)** は、極めてシンプルで軽量な特性で知られる **パブリッシュ/サブスクライブメッセージングプロトコル** です。このプロトコルは、デバイスが能力が限られており、低帯域幅、高遅延、または信頼性の低い接続が特徴のネットワーク上で動作する環境に特化しています。MQTTの主な目標は、ネットワーク帯域幅の使用を最小限に抑え、デバイスリソースの需要を削減することです。さらに、信頼性のある通信を維持し、一定レベルの配信保証を提供することを目指しています。これらの目標により、MQTTは **機械間通信(M2M)** および **モノのインターネット(IoT)** の急成長分野に非常に適しており、効率的に多くのデバイスを接続することが不可欠です。さらに、MQTTは、帯域幅とバッテリー寿命を節約することが重要なモバイルアプリケーションにも非常に有益です。
**デフォルトポート:** 1883
```
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
## トラフィックの検査
MQTTブローカーが**CONNECT**パケットを受信すると、**CONNACK**パケットが返されます。このパケットには接続状態を理解するために重要な戻りコードが含まれています。**0x00**の戻りコードは、資格情報が受け入れられたことを示し、成功した接続を意味します。一方、**0x05**の戻りコードは、資格情報が無効であることを示し、したがって接続を防ぎます。
たとえば、ブローカーが無効な資格情報のために接続を拒否する場合、シナリオは次のようになります:
```
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
```
![](<../.gitbook/assets/image (645) (1).png>)
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
## 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 #Subscriribe to 'test/topic'
```
または、このコードを実行して、認証なしで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)
### パブリッシュ/サブスクライブパターン
パブリッシュ/サブスクライブモデルは以下で構成されています:
- **パブリッシャー**: メッセージをブローカー内の1つ(または複数)のトピックに公開します。
- **サブスクライバー**: ブローカー内の1つ(または複数)のトピックに購読し、パブリッシャーから送信されたすべてのメッセージを受信します。
- **ブローカー**: パブリッシャーからのすべてのメッセージをサブスクライバーにルーティングします。
- **トピック**: 1つ以上のレベルで構成され、スラッシュ(例: /smartshouse/livingroom/temperature)で区切られています。
### パケット形式
すべての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の2つの値は予約されており、使用が禁止されています。
## Shodan
- `port:1883 MQTT`
htARTE(HackTricks AWS Red Team Expert) を使って、ゼロからヒーローまでAWSハッキングを学ぶ!
HackTricksをサポートする他の方法:
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASS&HackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。