# 1883 - MQTT (Mosquitto) 펜테스팅
htARTE (HackTricks AWS Red Team Expert)를 통해 **제로**부터 **히어로**가 되는 **AWS 해킹**을 배우세요! 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)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 - **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요. - **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
### [WhiteIntel](https://whiteintel.io)
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, **스틸러 악성 소프트웨어**에 의해 **침해**되었는지 회사 또는 고객을 확인하는 **무료** 기능을 제공합니다. WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. 그들의 웹사이트를 확인하고 **무료**로 엔진을 시험해 볼 수 있습니다: {% embed url="https://whiteintel.io" %} --- ## 기본 정보 **MQ Telemetry Transport (MQTT)**는 **발행/구독 메시징 프로토콜**로, 극도로 간단하고 가벼운 것으로 알려져 있습니다. 이 프로토콜은 기기가 제한된 기능을 가지고 있고 대역폭이 낮거나 지연이 크거나 신뢰할 수 없는 연결로 특징 지어지는 네트워크에서 작동하는 환경에 특별히 맞춰져 있습니다. MQTT의 핵심 목표는 네트워크 대역폭 사용을 최소화하고 기기 자원에 대한 수요를 줄이는 것입니다. 또한 신뢰할 수 있는 통신을 유지하고 일정 수준의 전달 보증을 제공하는 것을 목표로 합니다. 이러한 목표로 MQTT는 **기기 간 통신(M2M)** 및 **사물 인터넷(IoT)** 분야에 매우 적합하며, 효율적으로 다양한 기기를 연결하는 것이 필수적인 곳에서 특히 유용합니다. 또한 대역폭과 배터리 수명을 보존하는 것이 중요한 모바일 애플리케이션에 매우 유용합니다. **기본 포트:** 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 (973).png>) ### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt) ## MQTT Pentesting **인증은 완전히 선택 사항**이며 심지어 인증이 수행 중이더라도 **기본적으로 암호화가 사용되지 않습니다**(자격 증명은 평문으로 전송됨). 중간자 공격을 통해 비밀번호를 도용할 수 있습니다. 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)을 사용할 수도 있습니다. You can also use: ```bash apt-get install mosquitto mosquitto-clients mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic' mosquitto_sub -h -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) ### 발행/구독 패턴 발행/구독 모델은 다음으로 구성됩니다: - **발행자(Publisher)**: 브로커의 하나(또는 여러 개)의 주제에 메시지를 발행합니다. - **구독자(Subscriber)**: 브로커의 하나(또는 여러 개)의 주제를 구독하고 발행자로부터 보낸 모든 메시지를 수신합니다. - **브로커(Broker)**: 발행자로부터 수신한 모든 메시지를 구독자에게 라우팅합니다. - **주제(Topic)**: 슬래시(/)로 구분된 하나 이상의 수준으로 구성됩니다(예: /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라는 두 값은 예약되어 있으며 사용이 금지되어 있습니다. ## Shodan - `port:1883 MQTT` ### [WhiteIntel](https://whiteintel.io)
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 하는 검색 엔진으로, 회사 또는 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다. WhiteIntel의 주요 목표는 정보 도난 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. 그들의 웹사이트를 확인하고 **무료**로 엔진을 시도해 볼 수 있습니다: {% embed url="https://whiteintel.io" %}
htARTE (HackTricks AWS Red Team Expert)와 함께 **제로**부터 **히어로**까지 AWS 해킹을 배우세요! 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)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 - 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. - **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.