Opérations red-team
Opérations red-team sur un lab en cours (API Redteam)
Les actions red-team sur un lab en cours — inspecter les sessions d'attaque, exécuter des commandes, jouer des tests Atomic Red Team, téléverser des fichiers — sont servies par l'API Redteam, un service qui tourne à l'intérieur de chaque lab. C'est une API distincte de l'API Scenario ; sa référence complète : Référence API Redteam.
Adresse d'exécution (par lab)
Contrairement à l'API Scenario, l'API Redteam est atteinte par lab, via le proxy de la passerelle :
https://app.<votre-domaine>/proxy/<lab-id>/api/redteam<lab-id> est l'identifiant renvoyé au lancement (POST /scenario/run_lab) ou par GET /runner/ (API Scenario). C'est l'URL que le CLI mantis construit dans set_current_lab().
L'authentification est le même jeton OIDC Bearer que pour le reste de la plateforme (le proxy authentifie la requête) — voir le guide d'authentification.
export RT="https://app.mantis-platform.io/proxy/$LAB_ID/api/redteam"
export TOKEN="<votre jeton d'accès>"Exécution asynchrone
Les commandes sont mises en file, pas exécutées de façon synchrone : POST /command (et POST /atomic) renvoient immédiatement un identifiant ; interrogez ensuite GET /command/{id} jusqu'à obtenir output. Toute commande cible une session d'attaque existante (un accès), via son identifier.
1. Lister les sessions d'attaque
Toute action red-team cible une session d'attaque. Commencez par les lister :
curl "$RT/attack_sessions" -H "Authorization: Bearer $TOKEN"import requests
RT = "https://app.mantis-platform.io/proxy/" + LAB_ID + "/api/redteam"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}
sessions = requests.get(f"{RT}/attack_sessions", headers=HEADERS).json()["attack_sessions"]
for s in sessions:
print(s["identifier"], s.get("type"), s.get("username"))
session_id = sessions[0]["identifier"]2. Exécuter une commande personnalisée
POST /command met une commande en file sur une session et renvoie un idResultCommand ; interrogez GET /command/{id} pour status / output.
# 1) mise en file
curl -X POST "$RT/command" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "whoami", "identifier": "'"$SESSION_ID"'", "title": "CUSTOM EXECUTION"}'
# -> {"idResultCommand": 42}
# 2) interrogation
curl "$RT/command/42" -H "Authorization: Bearer $TOKEN"import time
def run_command(command, session_id, timeout=60):
r = requests.post(
f"{RT}/command",
json={"command": command, "identifier": session_id, "title": "CUSTOM EXECUTION"},
headers=HEADERS,
)
r.raise_for_status()
cid = r.json()["idResultCommand"]
for _ in range(timeout):
result = requests.get(f"{RT}/command/{cid}", headers=HEADERS).json()
if result.get("output"):
return result["output"]
time.sleep(1)
raise TimeoutError(f"commande {cid} expirée")
print(run_command("whoami", session_id))3. Jouer un test Atomic Red Team
POST /atomic téléverse un fichier Atomic Red Team (ATR) YAML et exécute ses tests sur une session, en renvoyant une liste d'identifiants de commandes à interroger individuellement.
curl -X POST "$RT/atomic?attack_session_identifier=$SESSION_ID" \
-H "Authorization: Bearer $TOKEN" \
-F "upload_file=@T1053.003.yaml"
# -> [101, 102] (interroger chacun via GET /command/{id})with open("T1053.003.yaml", "rb") as f:
r = requests.post(
f"{RT}/atomic",
params={"attack_session_identifier": session_id},
files={"upload_file": f},
headers=HEADERS,
)
r.raise_for_status()
for cid in r.json():
while True:
result = requests.get(f"{RT}/command/{cid}", headers=HEADERS).json()
if result.get("output"):
print(cid, result["status"], result["output"])
break
time.sleep(1)4. Téléverser un fichier sur une cible
POST /upload pousse un fichier local vers la cible d'une session (ex. une charge utile).
curl -X POST "$RT/upload?identifier=$SESSION_ID" \
-H "Authorization: Bearer $TOKEN" \
-F "upload_file=@./payload.exe"with open("payload.exe", "rb") as f:
requests.post(
f"{RT}/upload",
params={"identifier": session_id},
files={"upload_file": f},
headers=HEADERS,
).raise_for_status()Voir aussi
- Référence complète : API Redteam.
- Côté API Scenario : Opérations sur un lab en cours (rapport d'attaque et alertes de sécurité).

