
Application de cracking de binaire FortinetHunter (@YogSoth0). Fait partie du CTF pour FortinetHunter. ELF door : un Nuitka onefile strippé, un vérificateur Argon2id brouillé par XOR, intégrité AES-GCM.

TUI qui re-key le gate de mot de passe Nuitka « Fortinet Hunter 2026 ». Fait partie d'un challenge capture-the-flag de @YoSoth0) Write-up : Hunting the Fortinet Hunter 0-day
L'ELF ne s'exécute jamais sur l'hôte. GateX dépaquette statiquement le payload onefile, démasque par XOR le hash Argon2id brouillé et la bannière AES-GCM, réécrit ces blobs pour que FH_PASS=gatex satisfasse les deux vérifications, puis exécute le binaire interne dans une cage Docker verrouillée.
Cela ne permet pas de retrouver la passphrase originale de l'auteur. Argon2id (m=65536,t=3,p=4) fait son travail. Les plugins étaient déjà compilés dans l'ELF interne ; le mot de passe ne fait que déverrouiller une bannière.
abraxas
7350FH.zip (non fourni)Le payload est du code non fiable de type malware CTF. GateX ne fait que l'exec sous :
--platform linux/amd64--network none--read-only + tmpfs pour le dépaquetage--cap-drop ALL --security-opt no-new-privileges:true65532, 2 GiB de RAM, 1 CPU, 256 pidsgit clone [email protected]:abraxas/GateX.git
cd GateX
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
Placez le zip du challenge (ou l'ELF interne) là où GateX peut le voir :
mkdir -p files
cp /path/to/7350FH.zip files/7350FH.zip
TUI :
.venv/bin/python -m gatex --target files/7350FH.zip
Dans la TUI :
/probe # static zstd unpack + assemble the Argon2id hash (no exec)
/sandbox up # start Docker, build gatex-cage:noble
/bypass # re-key to FH_PASS=gatex and exec list in the cage
/cmd --help # argv against the patched inner ELF
/cmd --version
/cmd score --ml
Sans interface :
# unpack + print the assembled argon2id hash (no TUI, no exec)
.venv/bin/python -m gatex --target files/7350FH.zip --probe
# re-key + exec list in the cage
.venv/bin/python -m gatex --target files/7350FH.zip --bypass
L'option --session name conserve l'état sous ~/.gatex/sessions/ (mode 0600).
| Commande | Ce qu'elle fait |
|---|---|
/help | Liste des commandes |
/probe | Dépaquetage statique + assemblage du hash Argon2id (sans exec) |
/bypass [password] | Re-key des blobs du gate (par défaut gatex) et exec dans la cage |
/cmd [args…] | argv passé à l'ELF patché (list, --help, --version, …) |
/sandbox /sandbox up /sandbox down | Statut / build / destruction Docker |
/target <zip|elf> | Changer de binaire |
/session name | Changer de session réutilisable |
/timeout <seconds> | Timeout d'exec dans la cage |
/quit | Sauvegarder et quitter |
F1 = aide.
KAY + zstd). L'image interne est 7350FH.bin.BYTES c + fh-slim-hardened-v2.utf-8(xor(b64decode(ct), cycle(b64decode(key)))). Trois fragments assemblent le vrai PHC. Une chaîne Argon2 en clair dans le binaire est le leurre doctest argon2-cffi — ignorez-la.fh-slim-v2-salt-2026 / fh-slim-v2-core) → AES-256-GCM d'une bannière de 79 octets. Puis cli.main(). Les exploits ne sont pas dans le ciphertext./bypass écrit un nouveau PHC d'un mot de passe que vous connaissez, chiffre une bannière de remplacement sous l'AAD b"fh-slim-hardened-v2" (la valeur en octets, pas l'aiguille cfh-… sur disque), et exécute l'interne patché en tant que /opt/fh/7350FH.bin avec LD_LIBRARY_PATH=$ORIGIN.L'interne original + FH_PASS=gatex affiche toujours [!] access denied. C'est l'expérience.
docker exec en direct contre l'interne re-keyé, linux/amd64, net none, caps supprimées, uid 65532. Capturé le 2026-08-26.




Transcriptions complètes : files/evidence/*.txt et files/hunter-cli/.
.venv/bin/pip install pytest
.venv/bin/python -m pytest tests/test_offline.py -q
Les tests de patch/dépaquetage qui nécessitent files/7350FH.zip sont ignorés si le zip est absent.
Écrit pour un CTF que l'auteur a autorisé. Ne pointez pas ceci vers des systèmes que vous ne possédez pas. GateX ne fournit aucun exploit ni aucune copie de 7350FH.