
Brute-forceur de listes de mots pour les mots de passe de téléchargement GoFile (gofile.io)
Client TUI IRC de la fin des années 90 pour parcourir des wordlists contre un partage GoFile protégé par mot de passe.
Il ne communique qu'avec l'API REST documentée et traite les limites de débit comme une règle absolue : requêtes séquentielles, intervalle par défaut conservateur, refroidissement exponentiel sur 429 / error-rateLimit, et une pause automatique après des 429 répétés afin que le client ne puisse pas provoquer un bannissement d'IP.
Auteur : @abraxas_null · github.com/abraxas · abraxaslabs.tech · [email protected]
Dépôt : github.com/abraxas/GoFileX

La capture d'écran est une session en direct. L'identifiant de partage, le jeton d'API, l'UUID du compte et le mot de passe trouvé sont masqués. La chasse qui l'a produite est toujours en cours ; voir les notes et la série d'articles ci-dessous.
@YogSoth0 a annoncé une chasse au trésor en hommage à TESO : GoFile d'abord, binaire chiffré ensuite. La couche GoFile est un partage public protégé par mot de passe. L'API expose cette barrière via GET /contents/{id}?password=<sha256-hex>. GoFileX est le client que j'ai écrit pour franchir cette barrière sans dépasser le quota de listage non publié et sans provoquer un bannissement d'IP.
Article (mot de passe du partage non divulgué) :
Notes complémentaires dans ce dépôt : docs/this-is-not-your-password.md.
Utilisez ceci contre des partages que vous possédez ou pour lesquels vous avez une autorisation explicite de test. Les règles de chasse au trésor / CTF comptent aussi comme autorisation. Boucler sans relâche sur GET /contents jusqu'à ce que GoFile oublie votre IP, non.
D'après gofile.io/api et le client web officiel (wt.obf.js, /myprofile) :
| Règle | Comportement de GoFileX |
|---|---|
| Un compte, réutiliser le jeton | POST /accounts une fois par session ; stocké dans ~/.gofilex/sessions/ |
GET /contents/{id} est marqué Premium | Envoie le même X-Website-Token que le client web officiel afin qu'un invité puisse lire un partage public. Un jeton Premium depuis /myprofile est la voie documentée. |
| Le paramètre de mot de passe est le hex SHA-256 du texte en clair | Chaque tentative est hachée avant de quitter la machine |
error-rateLimit / HTTP 429 → ralentir | 3s par défaut entre les appels de listage (plancher 1,5s), 1s d'écart entre tous les appels d'API. Le 429 utilise un refroidissement exponentiel 15s × 2ⁿ (plafond 8 min) et double la vitesse de croisière ; pause après 3 429 consécutifs |
| Les limites exactes ne sont pas publiées ; des 429 répétés peuvent entraîner un bannissement d'IP | Le plancher d'intervalle est de 1,5s. /rate ne descendra pas en dessous. Le délai d'attente met en pause jusqu'à /heartbeat |
GET /servers ≤ 1 / 10s | Non appelé |
La longueur du mot de passe est filtrée localement selon la plage documentée de 4 à 100 caractères afin que les lignes trop courtes ou trop longues ne consomment jamais d'appel de listage.
Lectures complémentaires sur le protocole :
Python 3.10+ (python.org). Clonez depuis 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
Options facultatives :
.venv/bin/python -m gofilex \
--session ctf1 \
--target https://gofile.io/d/YOURSHARE \
--wordlist ~/lists/high-signal.txt \
--wordlist ~/lists/nordpass.txt
Un compte invité est créé sur /guest si la session n'a pas de jeton. Conservez ce jeton — pour les invités, c'est le seul moyen de revenir dans le compte. Si vous avez déjà un compte GoFile (surtout Premium), collez le jeton depuis gofile.io/myprofile :
/token YOUR_API_TOKEN
Il n'y a pas de cible par défaut. Pointez le client vers un partage avec --target ou /target avant /heartbeat ou /start.
| Commande | Ce qu'elle fait |
|---|---|
/help | Liste des commandes |
/heartbeat | Un GET /contents (compte dans le budget de listage ; pas de nouvelles tentatives). /probe est un alias |
/wl add FILE [FILE…] | Met en file d'attente les wordlists ; elles s'exécutent dans l'ordre, reprennent à la ligne sauvegardée |
/wl all | Met en file d'attente toutes les listes trouvées sous wordlists/custom/ puis wordlists/public/ |
/start /pause /resume /stop | Parcourt la file d'attente |
/try password | Tentative unique |
/rate 5 | Secondes entre les appels de listage (minimum 1,5, défaut 3) |
/stats | Rafraîchit GET /accounts/{id} (utilisation / niveau) |
/dl [dir] | Télécharge les fichiers après une réussite |
/session name | Change de session réutilisable |
/target <url|id> | Change de partage GoFile ; la progression est conservée par id |
/targets | Liste tous les ids GoFile stockés dans cette session |
/quit | Sauvegarde et quitte |
F1 = aide, Ctrl-S = démarrer, Ctrl-P = pause.
Tout ce qui compte est écrit dans ~/.gofilex/sessions/<name>.json après chaque tentative de mot de passe (remplacement atomique, mode 0600). Une coupure de courant ou /quit laisse le même point de contrôle.
Chaque session stocke :
idle / paused / running / found)python -m gofilex rouvre la dernière session (~/.gofilex/active.json). Utilisez --session other ou /session other pour une chasse séparée. /target vers un autre id crée une nouvelle tâche et copie les chemins de la wordlist actuelle (la progression repart à 0). Revenir en arrière restaure la ligne de cet id.
La boucle ne démarre pas automatiquement après un plantage (afin qu'une IP GoFile morte ne soit pas martelée). /start continue à partir de la ligne sauvegardée.
Les installations précédentes qui écrivaient dans ~/.onefilex/ sont migrées vers ~/.gofilex/ au premier lancement.