
FortinetHunter (@YogSoth0) — приложение для взлома бинарников. Часть CTF для FortinetHunter. ELF-дверь: stripped Nuitka onefile, XOR-скремблированный верификатор Argon2id, целостность AES-GCM.

TUI, который переустанавливает ключ ("re-keys") Nuitka-гейта с паролем из "Fortinet Hunter 2026". Часть CTF-задания от @YoSoth0) Разбор: Hunting the Fortinet Hunter 0-day
ELF никогда не запускается на хосте. GateX статически распаковывает onefile-полезную нагрузку, XOR-размаскирует зашифрованный Argon2id-хеш и AES-GCM-баннер, перезаписывает эти блобы так, чтобы FH_PASS=gatex удовлетворял обеим проверкам, а затем выполняет внутренний бинарник внутри изолированного Docker-контейнера.
Это не восстанавливает исходную парольную фразу автора. Argon2id (m=65536,t=3,p=4) делает свою работу. Плагины уже были скомпилированы во внутренний ELF; пароль лишь разворачивает баннер.
abraxas
7350FH.zip (не поставляется)Полезная нагрузка — это недоверенный код в стиле CTF-малвари. GateX только exec-ит его при условиях:
--platform linux/amd64--network none--read-only + tmpfs для распаковки--cap-drop ALL --security-opt no-new-privileges:true65532, 2 GiB RAM, 1 CPU, 256 pidsgit clone [email protected]:abraxas/GateX.git
cd GateX
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
Поместите архив с заданием (или внутренний ELF) туда, где GateX сможет его увидеть:
mkdir -p files
cp /path/to/7350FH.zip files/7350FH.zip
TUI:
.venv/bin/python -m gatex --target files/7350FH.zip
Внутри 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
Без интерфейса:
# 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
Необязательный --session name сохраняет состояние в ~/.gatex/sessions/ (режим 0600).
| Команда | Что делает |
|---|---|
/help | Список команд |
/probe | Статическая распаковка + сборка Argon2id-хеша (без exec) |
/bypass [password] | Переустановка ключа gate-блобов (по умолчанию gatex) и exec в контейнере |
/cmd [args…] | argv, передаваемые пропатченному ELF (list, --help, --version, …) |
/sandbox /sandbox up /sandbox down | Статус Docker / сборка / уничтожение |
/target <zip|elf> | Переключить бинарник |
/session name | Переключить переиспользуемую сессию |
/timeout <seconds> | Таймаут exec в контейнере |
/quit | Сохранить и выйти |
F1 = справка.
KAY + zstd). Внутренний образ — 7350FH.bin.BYTES c + fh-slim-hardened-v2.utf-8(xor(b64decode(ct), cycle(b64decode(key)))). Три фрагмента собирают настоящий PHC. Открытая строка Argon2 в бинарнике — это приманка из doctest argon2-cffi — игнорируйте её.fh-slim-v2-salt-2026 / fh-slim-v2-core) → AES-256-GCM для 79-байтового баннера. Затем cli.main(). Эксплойты не находятся в шифротексте./bypass записывает новый PHC для известного вам пароля, шифрует заменяющий баннер под AAD b"fh-slim-hardened-v2" (значение байтов, не игла cfh-… на диске) и запускает пропатченный внутренний файл как /opt/fh/7350FH.bin с LD_LIBRARY_PATH=$ORIGIN.Оригинальный внутренний файл + FH_PASS=gatex всё ещё выводит [!] access denied. Это и есть эксперимент.
Живой docker exec против переустановленного внутреннего файла, linux/amd64, net none, caps dropped, uid 65532. Захвачено 2026-08-26.




Полные транскрипты: files/evidence/*.txt и files/hunter-cli/.
.venv/bin/pip install pytest
.venv/bin/python -m pytest tests/test_offline.py -q
Тесты патча/распаковки, которым нужен files/7350FH.zip, пропускаются, если архив отсутствует.
Написано для CTF, на который автор дал разрешение. Не направляйте это на системы, которыми вы не владеете. GateX не поставляет ни эксплойтов, ни копии 7350FH.