2024-04-10 11:56:02 +00:00
# 1883 - MQTT( Mosquitto) のペンテスト
2022-04-28 16:01:33 +00:00
< details >
2024-04-10 11:56:02 +00:00
< summary > < strong > **htARTE( HackTricks AWS Red Team Expert) **で**ゼロからヒーローまでAWSハッキングを学ぶ**< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > こちら< / strong > < / a > < strong > ! < / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-09 12:54:39 +00:00
HackTricksをサポートする他の方法:
2022-04-28 16:01:33 +00:00
2024-04-10 11:56:02 +00:00
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASS& HackTricksグッズ** ](https://peass.creator-spring.com )を入手する
- [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を発見し、独占的な[**NFT**](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を提出して、あなたのハッキングテクニックを共有する
2022-04-28 16:01:33 +00:00
< / details >
2023-07-07 23:42:27 +00:00
## 基本情報
2020-07-15 15:43:14 +00:00
2024-04-10 11:56:02 +00:00
**MQ Telemetry Transport( MQTT) **は、**パブリッシュ/サブスクライブメッセージングプロトコル**として知られ、その極端な単純さと軽さが特徴です。このプロトコルは、デバイスが能力が限られており、低帯域幅、高遅延、または信頼性の低い接続が特徴付けられるネットワーク上で動作する環境に特に適しています。MQTTの主な目標には、ネットワーク帯域幅の使用を最小限に抑え、デバイスリソースへの要求を削減することが含まれます。さらに、信頼性のある通信を維持し、一定レベルの配信保証を提供することを目指しています。これらの目標により、MQTTは**機械間通信( M2M) **および**モノ のインターネット( IoT) **の急成長する分野に非常に適しており、効率的に多くのデバイスを接続することが不可欠です。さらに、MQTTは、帯域幅とバッテリー寿命を節約することが重要なモバイルアプリケーションに非常に有益です。
2020-07-15 15:43:14 +00:00
2024-02-09 12:54:39 +00:00
**デフォルトポート:** 1883
2021-10-18 11:21:18 +00:00
```
2020-09-24 18:58:31 +00:00
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
```
2023-07-07 23:42:27 +00:00
## トラフィックの検査
2020-09-24 18:58:31 +00:00
2024-04-10 11:56:02 +00:00
MQTTブローカーが**CONNECT**パケットを受信すると、**CONNACK**パケットが返されます。このパケットには接続状態を理解するために重要な戻りコードが含まれています。**0x00**の戻りコードは、資格情報が受け入れられたことを示し、接続が成功したことを意味します。一方、**0x05**の戻りコードは、資格情報が無効であることを示し、したがって接続を防ぎます。
2022-02-19 19:42:58 +00:00
2024-02-09 12:54:39 +00:00
たとえば、ブローカーが無効な資格情報のために接続を拒否する場合、シナリオは次のようになります:
```
{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}
```
2024-04-10 11:56:02 +00:00
![](< .. / . gitbook / assets / image ( 973 ) . png > )
2022-02-19 19:42:58 +00:00
2024-02-09 12:54:39 +00:00
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
2020-07-15 15:43:14 +00:00
2024-04-10 11:56:02 +00:00
## MQTTのPentesting
2020-07-15 15:43:14 +00:00
2024-04-10 11:56:02 +00:00
**認証は完全にオプション**であり、認証が行われていても**デフォルトでは暗号化されていません**( 資格情報は平文で送信されます) 。MITM攻撃はパスワードを盗むために実行できます。
2020-07-15 15:43:14 +00:00
2024-04-10 11:56:02 +00:00
MQTTサービスに接続するには、[https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell)を使用して、次の操作を行います。
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
> 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/#"
```
2024-02-09 12:54:39 +00:00
あなたは[**https://github.com/akamai-threat-research/mqtt-pwn**](https://github.com/akamai-threat-research/mqtt-pwn)を使用することもできます。
2022-02-19 19:42:58 +00:00
```bash
apt-get install mosquitto mosquitto-clients
2024-04-10 11:56:02 +00:00
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
```
2024-02-09 12:54:39 +00:00
または、このコードを実行して、認証なしでMQTTサービスに接続し、すべてのトピックにサブスクライブしてリスンすることができます:
2020-07-15 15:43:14 +00:00
```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):
2023-07-07 23:42:27 +00:00
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')
2020-07-15 15:43:14 +00:00
def on_message(client, userdata, message):
2023-07-07 23:42:27 +00:00
print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload))
2020-07-15 15:43:14 +00:00
def main():
2023-07-07 23:42:27 +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()
2020-07-15 15:43:14 +00:00
if __name__ == "__main__":
2023-07-07 23:42:27 +00:00
main()
2020-07-15 15:43:14 +00:00
```
2024-02-09 12:54:39 +00:00
## もっと情報
2020-07-15 15:43:14 +00:00
2024-04-10 11:56:02 +00:00
こちらから: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b ](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b )
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### パブリッシュ/サブスクライブパターン <a href="#b667" id="b667"></a>
2020-07-15 15:43:14 +00:00
2024-02-09 12:54:39 +00:00
パブリッシュ/サブスクライブモデルは以下で構成されています:
2020-07-15 15:43:14 +00:00
2024-02-09 12:54:39 +00:00
- **パブリッシャー**: メッセージをブローカー内の1つ( または複数) のトピックに公開します。
2024-04-10 11:56:02 +00:00
- **サブスクライバー**: ブローカー内の1つ( または複数) のトピックにサブスクライブし、パブリッシャーから送信されたすべてのメッセージを受信します。
2024-02-09 12:54:39 +00:00
- **ブローカー**: パブリッシャーからのすべてのメッセージをサブスクライバーにルーティングします。
2024-04-10 11:56:02 +00:00
- **トピック**: 1つ以上のレベルで構成され、スラッシュで区切られたものです( 例: /smartshouse/livingroom/temperature) 。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
### パケット形式 <a href="#f15a" id="f15a"></a>
2020-07-15 15:43:14 +00:00
2024-02-09 12:54:39 +00:00
すべてのMQTTパケットには固定ヘッダーが含まれています( 図02) 。図02: 固定ヘッダー
2020-07-15 15:43:14 +00:00
2024-02-09 12:54:39 +00:00
![https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png ](https://miro.medium.com/max/838/1\*k6RkAHEk0576geQGUcKSTA.png )
2020-09-21 23:14:27 +00:00
2024-02-09 12:54:39 +00:00
### パケットタイプ
2020-09-21 23:14:27 +00:00
2024-04-10 11:56:02 +00:00
- 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) : クライアントが接続を終了するために初期化されます。
2024-02-09 12:54:39 +00:00
- 0と15の2つの値は予約されており、使用が禁止されています。
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
2024-02-09 12:54:39 +00:00
- `port:1883 MQTT`
2022-04-28 16:01:33 +00:00
< details >
2024-04-10 11:56:02 +00:00
< summary > < strong > ゼロからヒーローまでAWSハッキングを学ぶ< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > < / a > < strong > !< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-09 12:54:39 +00:00
HackTricksをサポートする他の方法:
2022-04-28 16:01:33 +00:00
2024-02-09 12:54:39 +00:00
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASS& HackTricksスワッグ** ](https://peass.creator-spring.com )を手に入れる
2024-04-10 11:56:02 +00:00
- [**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**](https://github.com/carlospolop/hacktricks)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
2022-04-28 16:01:33 +00:00
< / details >