⬅ Retour à Challenges · 🏠 Accueil du repo
Flag Command — Web (Very Easy)¶
| Catégorie | Web |
| Difficulté | Very Easy |
| Récompense | 100 XP |
| Événement | Challenges HTB |
Scénario¶
Embark on the "Dimensional Escape Quest" where you wake up in a mysterious forest maze that's not quite of this world. Navigate singing squirrels, mischievous nymphs, and grumpy wizards in a whimsical labyrinth that may lead to otherworldly surprises. Will you conquer the enchanted maze or find yourself lost in a different dimension of magical challenges? The journey unfolds in this mystical escape!
Un jeu d'aventure textuel dans le navigateur. Le but est de trouver un flag caché derrière une commande secrète.
Flux de résolution¶
flowchart LR
A["Ouvrir l'instance"] --> B["F12 → Network"]
B --> C["Requête /api/options"]
C --> D["Trouver la clé secret"]
D --> E["start + commande secrète"]
E --> F["Flag"]
Solution pas à pas¶
1. Accéder au challenge
Ouvre l’URL de l’instance (ex: http://154.57.164.80:31863).
Tu arrives sur un terminal style CLI avec un scénario de forêt magique.
2. Démarrer le jeu
Le jeu propose des choix (HEAD NORTH, etc.). Tu peux jouer normalement, mais ce n’est pas nécessaire.
3. Inspecter le trafic réseau
- Ouvre les DevTools (
F12) - Onglet Network
- Recharge la page (
F5) si besoin
Tu verras une requête vers /api/options (parfois affichée simplement options).
4. Récupérer la commande secrète
Clique sur la requête → onglet Response (ou Preview).
Tu obtiens un JSON de ce type :
{
"allPossibleCommands": {
"1": ["HEAD NORTH", "HEAD WEST", "HEAD EAST", "HEAD SOUTH"],
"2": ["GO DEEPER INTO THE FOREST", "FOLLOW A MYSTERIOUS PATH", "CLIMB A TREE", "TURN BACK"],
"3": ["EXPLORE A CAVE", "CROSS A RICKETY BRIDGE", "FOLLOW A GLOWING BUTTERFLY", "SET UP CAMP"],
"4": ["ENTER A MAGICAL PORTAL", "SWIM ACROSS A MYSTERIOUS LAKE", "FOLLOW A SINGING SQUIRREL", "BUILD A RAFT AND SAIL DOWNSTREAM"],
"secret": [
"Blip-blop, in a pickle with a hiccup! Shmiggity-shmack"
]
}
}
La clé secret contient la commande cachée.
5. Entrer la commande secrète
Dans le terminal du jeu :
Le jeu te donne immédiatement le flag.
Flag¶
Analyse technique¶
Le frontend charge les options via fetch('/api/options') et stocke le résultat dans availableOptions.
Dans main.js, la validation ressemble à :
if (availableOptions[currentStep].includes(currentCommand)
|| availableOptions['secret'].includes(currentCommand)) {
// progression / victoire
}
Les options normales sont affichées à l’utilisateur, mais la clé "secret" ne l’est jamais. Elle n’apparaît que dans la réponse de l’API.
Autres façons de trouver la commande :
- Lire directement main.js / game.js / commands.js dans l’onglet Sources
- Utiliser curl http://<IP>:<PORT>/api/options
- Intercepter avec Burp Suite
Points clés¶
- Toujours regarder l’onglet Network sur les challenges web
- Les endpoints d’API (
/api/...) cachent souvent des données intéressantes - Le code JavaScript côté client révèle fréquemment la logique et les secrets