8.3 KiB
1883 - MQTTのペンテスト(Mosquitto)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
-
The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
-
公式のPEASS&HackTricksのグッズを手に入れましょう。
-
💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
-
**ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。
基本情報
MQTTはMQ Telemetry Transportの略です。これは、制約のあるデバイスや低帯域幅、高遅延または信頼性の低いネットワーク向けに設計された、パブリッシュ/サブスクライブ型の非常にシンプルで軽量なメッセージングプロトコルです。設計原則は、ネットワーク帯域幅とデバイスのリソース要件を最小限に抑えると同時に、信頼性と一定の配信保証を確保することです。これらの原則は、接続されたデバイスの「マシン間通信」(M2M)または「モノのインターネット」の新興世界や、帯域幅とバッテリー電力が貴重なモバイルアプリケーションにとっても理想的なプロトコルとなっています。
デフォルトポート: 1883
PORT STATE SERVICE REASON
1883/tcp open mosquitto version 1.4.8 syn-ack
トラフィックの検査
MQTTブローカーは、CONNECTパケットに対する応答としてCONNACKパケットを送信します。リターンコード0x00は資格情報が有効であることを示し、リターンコード0x05は無効であることを示します。0x05の例:
MQTTのブルートフォース攻撃
MQTTのペントテスト
認証は完全にオプションであり、認証が実行されている場合でも、デフォルトでは暗号化は使用されません(資格情報は平文で送信されます)。MITM攻撃を実行してパスワードを盗むことはまだ可能です。
MQTTサービスに接続するには、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を使用することもできます。
また、以下も使用できます:
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscriribe to 'test/topic'
または、このコードを実行して、認証なしでMQTTサービスに接続し、すべてのトピックにサブスクライブしてリスンすることを試すこともできます。
#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
パブリッシュ/サブスクライブパターン
パブリッシャー: ブローカー内の1つ(または複数)のトピックにメッセージを公開します。 サブスクライバー: ブローカー内の1つ(または複数)のトピックにサブスクライブし、パブリッシャーから送信されたすべてのメッセージを受信します。 ブローカー: パブリッシャーからのすべてのメッセージをサブスクライバーにルーティングします。 トピック: 1つ以上のレベルで構成され、スラッシュ(/)で区切られています(例:/smartshouse/livingroom/temperature)。
パケット形式
すべてのMQTTパケットには固定ヘッダーが含まれています(図02)。図02:固定ヘッダー
固定ヘッダーの最初のフィールドは、MQTTパケットのタイプを表します。すべてのパケットタイプは、表01にリストされています。表01:MQTTパケットタイプ
Shodan
port:1883 MQTT
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか? SUBSCRIPTION PLANSをチェックしてください!
-
The PEASS Familyを発見しましょう、私たちの独占的なNFTのコレクション
-
公式のPEASS&HackTricksのスワッグを手に入れましょう
-
**💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
-
**ハッキングのトリックを共有するには、hacktricks repoとhacktricks-cloud repo**にPRを提出してください。