
Брутфорсер словарей для паролей скачивания GoFile (gofile.io)
TUI IRC-клиента конца 90-х для перебора словарей по защищённому паролем ресурсу GoFile.
Он общается только с документированным REST API и
рассматривает ограничения скорости как жёсткое правило: последовательные
запросы, консервативный интервал по умолчанию, экспоненциальная задержка при
429 / error-rateLimit и автоматическая пауза после повторяющихся 429,
чтобы клиент не нарвался на блокировку по IP.
Автор: @abraxas_null · github.com/abraxas · abraxaslabs.tech · [email protected]
Репозиторий: github.com/abraxas/GoFileX

На скриншоте — живая сессия. Идентификатор ресурса, API-токен, UUID аккаунта и найденный пароль скрыты. Охота, в ходе которой он был получен, всё ещё идёт; см. заметки и серию постов в блоге ниже.
@YogSoth0 анонсировал
охоту за сокровищем в духе TESO: сначала GoFile, потом зашифрованный бинарник.
Слой GoFile — это публичный ресурс, доступ к которому закрыт паролем. API
предоставляет этот шлюз как GET /contents/{id}?password=<sha256-hex>. GoFileX —
это клиент, который я написал, чтобы пройти через этот шлюз, не превысив
неопубликованную квоту на листинг и не заработав блокировку по IP.
Разбор (пароль от ресурса не раскрывается):
Сопутствующие заметки в этом репозитории: docs/this-is-not-your-password.md.
Используйте это против ресурсов, которыми вы владеете или на тестирование
которых у вас есть явное разрешение. Правила охоты за сокровищами / CTF
тоже считаются разрешением. Долбить GET /contents в тесном цикле, пока
GoFile не забудет ваш IP, — не считается.
Из gofile.io/api и официального веб-клиента
(wt.obf.js,
/myprofile):
| Правило | Как ведёт себя GoFileX |
|---|---|
| Один аккаунт, повторное использование токена | POST /accounts один раз за сессию; сохраняется в ~/.gofilex/sessions/ |
GET /contents/{id} помечен как Premium | Отправляет тот же X-Website-Token, что использует официальный веб-клиент, чтобы гость мог прочитать публичный ресурс. Premium-токен из /myprofile — это документированный путь. |
| Параметр пароля — это SHA-256 hex от открытого текста | Каждая догадка хешируется перед тем, как покинуть машину |
error-rateLimit / HTTP 429 → отступить | По умолчанию 3 с между вызовами листинга (минимум 1.5 с), 1 с пауза между любыми вызовами API. При 429 используется экспоненциальная задержка 15 с × 2ⁿ (максимум 8 мин) и удваивается крейсерская скорость; пауза после 3 подряд идущих 429 |
| Точные лимиты не опубликованы; повторяющиеся 429 могут привести к блокировке по IP | Минимальный интервал — 1.5 с. /rate не опустится ниже него. Тайм-аут приостанавливает работу до /heartbeat |
GET /servers ≤ 1 / 10 с | Не вызывается |
Длина пароля фильтруется локально до документированного диапазона 4–100 символов, чтобы короткие/длинные строки никогда не тратили вызов листинга.
Дополнительное чтение по протоколу:
Python 3.10+ (python.org). Клонируйте из github.com/abraxas/GoFileX:
git clone [email protected]:abraxas/GoFileX.git
cd GoFileX
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m gofilex
Необязательные флаги:
.venv/bin/python -m gofilex \
--session ctf1 \
--target https://gofile.io/d/YOURSHARE \
--wordlist ~/lists/high-signal.txt \
--wordlist ~/lists/nordpass.txt
Гостевой аккаунт создаётся на /guest, если в сессии нет токена. Сохраните
этот токен — для гостей это единственный способ вернуться в аккаунт. Если
у вас уже есть аккаунт GoFile (особенно Premium), вставьте токен
из gofile.io/myprofile:
/token YOUR_API_TOKEN
Цели по умолчанию нет. Укажите клиенту ресурс через --target
или /target перед /heartbeat или /start.
| Команда | Что делает |
|---|---|
/help | Список команд |
/heartbeat | Один GET /contents (учитывается в бюджете листинга; без повторов). /probe — псевдоним |
/wl add FILE [FILE…] | Поставить словари в очередь; они выполняются по порядку, возобновляясь с сохранённой строки |
/wl all | Поставить в очередь все списки, найденные в wordlists/custom/, затем wordlists/public/ |
/start /pause /resume /stop | Пройти очередь |
/try password | Одна попытка |
/rate 5 | Секунды между вызовами листинга (минимум 1.5, по умолчанию 3) |
/stats | Обновить GET /accounts/{id} (использование / уровень) |
/dl [dir] | Скачать файлы после попадания |
/session name | Переключить переиспользуемые сессии |
/target <url|id> | Переключить ресурс GoFile; прогресс сохраняется для каждого id |
/targets | Показать все GoFile id, сохранённые в этой сессии |
/quit | Сохранить и выйти |
F1 = справка, Ctrl-S = старт, Ctrl-P = пауза.
Всё важное записывается в ~/.gofilex/sessions/<name>.json после каждой
попытки ввода пароля (атомарная замена, режим 0600). Потеря питания
или /quit оставляют одну и ту же контрольную точку.
Каждая сессия хранит:
idle / paused / running / found)python -m gofilex заново открывает последнюю сессию (~/.gofilex/active.json).
Используйте --session other или /session other для отдельной охоты. /target
на другой id создаёт новую задачу и копирует текущие пути к словарям
(прогресс начинается с 0). Переключение обратно восстанавливает строку этого id.
Цикл не запускается автоматически после сбоя (чтобы не долбить мёртвый
IP GoFile). /start продолжает с сохранённой строки.
Предыдущие установки, писавшие в ~/.onefilex/, мигрируются
в ~/.gofilex/ при первом запуске.
GoFileX не поставляет словари. Приносите свои. См. wordlists/README.md для публичных источников: