
Bruteforcer di wordlist per le password di download di GoFile (gofile.io)
TUI in stile client IRC di fine anni '90 per provare wordlist contro una condivisione GoFile protetta da password.
Comunica esclusivamente con la REST API documentata e tratta i rate limit come una regola ferrea: richieste sequenziali, un intervallo predefinito conservativo, cooldown esponenziale su 429 / error-rateLimit e una pausa automatica dopo ripetuti 429, così il client non può incappare in un ban dell'IP.
Autore: @abraxas_null · github.com/abraxas · abraxaslabs.tech · [email protected]
Repo: github.com/abraxas/GoFileX

Lo screenshot è una sessione dal vivo. Share id, token API, UUID dell'account e password trovata sono oscurati. La caccia che l'ha prodotta è ancora in corso; vedi le note e la serie di blog qui sotto.
@YogSoth0 ha pubblicizzato una caccia al tesoro in omaggio a TESO: prima GoFile, poi il binario cifrato. Il livello GoFile è una condivisione pubblica protetta da password. L'API espone quel gate come GET /contents/{id}?password=<sha256-hex>. GoFileX è il client che ho scritto per poter attraversare quel gate senza saturare la quota di listing non pubblicata e beccarmi un ban dell'IP.
Write-up (password della condivisione omessa):
Note di accompagnamento in questo repo: docs/this-is-not-your-password.md.
Usalo contro condivisioni che possiedi o per cui hai permesso esplicito di testare. Le regole di caccia al tesoro / CTF contano comunque come permesso. Ciclare in modo serrato GET /contents finché GoFile si dimentica del tuo IP non vale come permesso.
Da gofile.io/api e dal client web ufficiale (wt.obf.js, /myprofile):
| Regola | Come si comporta GoFileX |
|---|---|
| Un account, riusa il token | POST /accounts una volta per sessione; memorizzato in ~/.gofilex/sessions/ |
GET /contents/{id} ha il badge Premium | Invia lo stesso X-Website-Token che usa il client web ufficiale, così un guest può leggere una condivisione pubblica. Un token Premium da /myprofile è il percorso documentato. |
| Il parametro password è l'esadecimale SHA-256 del plaintext | Ogni tentativo viene hashato prima di lasciare la macchina |
error-rateLimit / HTTP 429 → back off | Predefinito 3s tra le chiamate di listing (minimo 1.5s), 1s di intervallo tra qualsiasi chiamata API. Il 429 usa un cooldown esponenziale 15s × 2ⁿ (cap 8 min) e raddoppia la velocità di crociera; pausa dopo 3 429 consecutivi |
| I limiti esatti non sono pubblicati; 429 ripetuti possono causare IP-ban | Il minimo dell'intervallo è 1.5s. /rate non scenderà sotto. Il timeout mette in pausa fino a /heartbeat |
GET /servers ≤ 1 / 10s | Non viene chiamato |
La lunghezza della password viene filtrata localmente nell'intervallo documentato di 4–100 caratteri, così le righe troppo corte/lunghe non consumano mai una chiamata di listing.
Ulteriori letture sul protocollo:
Python 3.10+ (python.org). Clona da 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
Flag opzionali:
.venv/bin/python -m gofilex \
--session ctf1 \
--target https://gofile.io/d/YOURSHARE \
--wordlist ~/lists/high-signal.txt \
--wordlist ~/lists/nordpass.txt
Un account guest viene creato su /guest se la sessione non ha un token. Conserva quel token — per i guest è l'unico modo per rientrare nell'account. Se hai già un account GoFile (specialmente Premium), incolla il token da gofile.io/myprofile:
/token YOUR_API_TOKEN
Non esiste un target predefinito. Punta il client verso una condivisione con --target o /target prima di /heartbeat o /start.
| Comando | Cosa fa |
|---|---|
/help | Elenco dei comandi |
/heartbeat | Un GET /contents (conta sul budget di listing; nessun retry). /probe è un alias |
/wl add FILE [FILE…] | Accoda wordlist; vengono eseguite in ordine, riprendendo dalla riga salvata |
/wl all | Accoda ogni lista trovata sotto wordlists/custom/ poi wordlists/public/ |
/start /pause /resume /stop | Avvia la coda |
/try password | Tentativo singolo |
/rate 5 | Secondi tra le chiamate di listing (minimo 1.5, predefinito 3) |
/stats | Aggiorna GET /accounts/{id} (utilizzo / tier) |
/dl [dir] | Scarica i file dopo un hit |
/session name | Cambia sessione riutilizzabile |
/target <url|id> | Cambia condivisione GoFile; il progresso è mantenuto per id |
/targets | Elenca ogni id GoFile memorizzato in questa sessione |
/quit | Salva ed esci |
F1 = help, Ctrl-S = start, Ctrl-P = pause.
Tutto ciò che conta viene scritto in ~/.gofilex/sessions/<name>.json dopo ogni tentativo di password (replace atomico, mode 0600). Una perdita di corrente o /quit lascia lo stesso checkpoint.
Ogni sessione memorizza:
idle / paused / running / found)python -m gofilex riapre l'ultima sessione (~/.gofilex/active.json). Usa --session other o /session other per una caccia separata. /target verso un altro id crea un nuovo job e copia i path della wordlist corrente (il progresso parte da 0). Tornando indietro viene ripristinata la riga di quell'id.
Il loop non si avvia automaticamente dopo un crash (così un IP GoFile morto non viene martellato). /start continua dalla riga salvata.
Le installazioni precedenti che scrivevano ~/.onefilex/ vengono migrate a ~/.gofilex/ al primo avvio.
GoFileX non include wordlist. Porta le tue. Vedi wordlists/README.md per fonti pubbliche: