
Framework di ricognizione di massa, fingerprinting delle versioni, tester CVE e sfruttamento in tempo reale per istanze Ollama aperte.
Toolkit modulare per scoprire server Ollama esposti, rilevare le versioni e validare l'accesso ai modelli.
OllamaHound è un toolkit modulare, orientato al Red Team, per scoprire server Ollama esposti pubblicamente, rilevare le versioni, classificare l'esposizione a CVE, verificare se la generazione di testo è possibile e (opzionalmente) abilitare una sessione CLI interattiva per test controllati.
@@@@@@@@@@@@@@@@@@@@@@@@@@@#*#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@%.-+-:#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@+--=%@@@@@@@@-.@@@+ #@@@@@@@@@@@@@@@@@ @@@@@@@@@@@= %%+.=@@@%###-.@@@@= %@@@@@@@@@@@@@@@@ @@@@@@@@@@@-.@@@@..--====-.=@@@@.-@@@@@@@@@@@@@@@@ @@@@@@@@@@@# +#+-:*%@@@@@@@@@@@@- +@@@@@@@@@@@@@@@ @@*@@@@@#*+=:::.-*%@@@@@@@@@@@@@@%::%@@@@@@@@@@@@@ @+:-@@*----=***+==-=#@@@@@@@@@@@@@@::@@@@@@@@@@@@@ @*+#@=-==+=%@@@@%#=+:*%%%@@@@#++%@@+ %@@@@@@@@@@@@ +:=@#.+-@#=#@%+++%@:* =++==*@- *@@-.@@@@@@@@@@@@@ %=+@+--*@@*=##+++%#.+::=@#%:+@%@@@@%.=@@@@@@@@@@@@ @@@@#.+-@@%=*@@@@@+.* =-:*@-=@@@@@@@* %@@@@@@@@@@@ @@@@@+:==#*=%@@@@*-=.:--+*-=@@@@@@@@+ %@@@@@@@@@@@ @@@@@@#=----+*++=--=**++*#%@@@@@@@@% =@@@@@@@@@@@@ @@@@@@@@%*-:---.+*%@@@@@@@@@@@@@@@@+-:+@@@@@@@@@@@ @@@@@@@@@@# ==:.%@@@@@@@@@@@@@@@@@@@@%.-@@@@@@@@@@ @@@@@@@@@@#.@@:.#@@@@@@@@@@@@@@#@@@@@@% *@@@@@@@@@ @@@@@@@@@*::--::=%@@@@@@@@@@@@::@@@@@@@ =@@@@@@@@@ @@@@@@@@-.#@@@@@-.@@@@@@@@@@#.-@@@@@@@@*.-@@@@@@@@ @@@@@@@@.-@@@@@%::@@@@@@@@%=.+@@@@@@@@@@%.-@@@@@@@ @@@@@@@@#::++=::+@@@@@@@%=:=%@@@@@%%@@@@@+ @@@@@@@ @@@@@@@@@@=.:: #@@@@@@@=.+@@@@@@%=:*@@@@@= @@@@@@@ @@@@@@@@@@@@%-.%@@@@@@# *@@@@@#-:+@@@@@@% +@@@@@@@ @@@@@@@@@@@@@.=@@@@@@@@=:===---*@@@@@@@@@.=@@@@@@@ @@@@@@@@@@@@@=.%@@@@@@@@#-##%@@@@@@@@@@@@.-@@@@@@@ @@@@@@@@@@@@@@= -%@@@@@@# #@@@@@@@@@@@@@# #@@@@@@@ @@@@@@@@@@@@@@@ .:=*%%@%#..*@@@@@@@@@@@+.+@@@@@@@@ @@@@@@@@@@@@@@@.=@*==- -=*. --==+*#**=:-#@@@@@@@@@ @@@@@@@@@@@@@@@:-@@@@# #@@+ %%##*..++#%@@@@@@@@@@@ @@@@@@@@@@@@@@@::@@@@-.@@@% *@@@@-:@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@*.=++::%@@@@::%@%+ *@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@%***%@@@@@@%=---=%@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@---OllamaHound---@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@---By 7h30th3r0n3---@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!!! AVVERTENZA !!!
⚠️ Avviso legale ed etico
Questo progetto è pensato per valutazioni di sicurezza autorizzate (reti interne, incarichi delimitati, ambienti di laboratorio).
Usalo solo su sistemi di tua proprietà o per i quali disponi di autorizzazione scritta esplicita.
Utilizzando questo software, accetti di essere l'unico responsabile delle tue azioni.
Gli autori e i contributori forniscono questo software "così com'è" e declinano ogni responsabilità
per qualsiasi uso improprio, danno o conseguenza legale derivante dal suo utilizzo.
/api/tags e /api/generateresults/scraper/targets.txtresults/scanner/<prefix>_YYYYMMDD_HHMMSS.csvPuoi procedere passo dopo passo oppure eseguire l'Orchestrator per concatenare le prime tre fasi.
asyncio + aiohttp (migliaia di socket in volo)rich<prefix>_YYYYMMDD_HHMMSS.csvGET /api/version → fallback GET /version → fallback header Server< 0.1.47<= 0.3.14GET /api/tagsaiohttprichpackagingrequestsshodanInstalla le dipendenze:
python3 -m pip install -U aiohttp rich packaging requests shodan
Usa Docker:
docker build -t ollamahound .
docker run -it --rm ollamahound <ollamahound scripts>
Opzione A (più veloce): recupera → scansiona → connettiti
python3 ollamaScraper.py
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
python3 ollamaConnector.py --scan-csv results/scanner/ollama_scan_*.csv
Opzione B (one-shot): pipeline dell'orchestrator
python3 ollamaOrchestrator.py --scan-gen-ok-only
ollamaOrchestrator.py esegue semplicemente lo scraper, lo scanner e poi il connector, così puoi passare dalla raccolta via Shodan a una CLI interattiva con un solo comando. Scraper e connector restano interattivi, ma l'orchestrator collega i loro output per te.
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
results/orchestrator/targets.txt (modifica con --targets).results/scanner/ con il prefisso di --scan-output-prefix (predefinito orchestrator_scan).--connector-row per selezionare automaticamente una riga all'avvio del connector, oppure scegline una in modo interattivo come al solito.--skip-scrape, --skip-scan e --skip-connect ti permettono di riprendere da un punto intermedio usando output già esistenti (--scan-csv è obbligatorio quando si salta la fase di scansione).Il resto di questa sezione vale comunque se vuoi eseguire ogni modulo manualmente.
Scraper:
# Basic interactive scrape (Shodan dork picker)
python3 ollamaScraper.py
# Custom output folder + filename
python3 ollamaScraper.py --output-dir results/my-scrape -o targets_acme.txt
Scanner:
# Scan targets.txt (default 11434, 500 concurrency, 8s timeout)
python3 ollamaScanner.py results/scraper/targets.txt
# Only hosts where /api/generate returns 200
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
# Multi-port scan (space and comma mix)
python3 ollamaScanner.py results/scraper/targets.txt -p 11434 8080,13871
# Aggressive sweep (short timeout + high concurrency)
python3 ollamaScanner.py results/scraper/targets.txt --timeout 3 -c 800
# Keep only vulnerable hosts (RCE/DoS) and unknown versions
python3 ollamaScanner.py results/scraper/targets.txt --vuln-only --show-unknown
# Custom CSV prefix + output dir
python3 ollamaScanner.py results/scraper/targets.txt -o scan_acme.csv --output-dir results/scanner_acme
Navigator:
# Filter a directory of scanner CSVs
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce
# Filter a single CSV, restrict to llama models, size >= 7B
python3 ollamaNavigator.py --scan-csv results/scanner/scan_20260107_180002.csv \
--model llama --min-params 7
# Exclude models + search keywords
python3 ollamaNavigator.py --scan-csv results/scanner --exclude-model qwen --search france
# Export filtered rows
python3 ollamaNavigator.py --scan-csv results/scanner --vuln dos \
--json-output results/navigator/dos.json --csv-output results/navigator/dos.csv
# Interactive filter menu
python3 ollamaNavigator.py --scan-csv results/scanner --interactive
Connector:
# Connect directly
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
# Use a scanner CSV row (1-based index)
python3 ollamaConnector.py --scan-csv results/scanner/scan_20260107_180002.csv --scan-row 3
Orchestrator:
# Full pipeline
python3 ollamaOrchestrator.py
# Full pipeline + only gen-ok + vuln-only
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
# Reuse existing targets and CSV, only run connector
python3 ollamaOrchestrator.py --skip-scrape --skip-scan --scan-csv results/scanner/scan_20260107_180002.csv
# Skip connector (scrape + scan only)
python3 ollamaOrchestrator.py --skip-connect
targets.txt può contenere un elemento per riga:
192.0.2.1010.0.0.0/24ollama.example.orgSe generi l'elenco con lo scraper, indica allo scanner results/scraper/targets.txt (o qualunque percorso tu abbia scelto con --output-dir).
ollamaScraper.py può generare results/scraper/targets.txt interrogando Shodan:
python3 ollamaScraper.py
Lo script conserva la tua chiave API in .shodan_api, ti permette di scegliere un dork (globale o limitato al paese) e aggiunge ogni risultato a results/scraper/targets.txt stampando al contempo un contesto di base. Puoi opzionalmente aggiungere un filtro org:"Company" per restringere i risultati. Ctrl+C o il raggiungimento del limite massimo di IP interrompono l'esecuzione. Usa --output-dir / -o per cambiare cartella o nome del file, poi passa quel percorso allo scanner.
Mostra solo gli host in cui /api/generate restituisce HTTP 200:
python3 ollamaScanner.py targets.txt --gen-ok-only
Sweep più aggressivo (timeout breve + concorrenza elevata):
python3 ollamaScanner.py targets.txt --gen-ok-only --timeout 3 -c 800
Esempio di sweep completo:
11434 e 8080/api/generate == 200scan.csvpython3 ollamaScanner.py targets.txt -p 11434,8080 --timeout 2 -c 1200 \
--gen-ok-only --vuln-only --show-unknown -o scan.csv
I CSV dello scanner finiscono ora in results/scanner/. Usa --output-dir se vuoi inviare i file altrove (la cartella viene creata automaticamente).
Lo scanner stampa una tabella rich con:
? se sconosciuta)rce, dos, patched, unknown)tags, generate, show)Un CSV con timestamp viene scritto automaticamente, ad esempio:
ollama_scan_20260107_180002.csv
Campi:
ip, port, version, vuln, tags, generate, show, modelsUsa il navigator per filtrare, ordinare ed esportare i risultati da un singolo CSV o da un'intera cartella di output dello scanner (deduplicati per host/porta, modelli aggregati).
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce --model llama
--scan-csv accetta un singolo file CSV o una cartella di output dello scanner.params (predefinito), ip o version.--interactive per un editor di filtri a menu + esportazioni.--json-output o --csv-output.Connettiti a un'istanza scoperta e ricevi le risposte in streaming:
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
Se ometti --model, la CLI recupera /api/tags, elenca tutti i modelli esposti dal server e ti fa scegliere tramite numero. Ogni prompt mostra i token in streaming in ciano finché il server non termina o premi Ctrl+C. Digita exit / quit per uscire.
Puoi anche puntare il connector a una riga di un CSV dello scanner, così non devi riscrivere host e modello:
python3 ollamaConnector.py --scan-csv scan_20260107_141056.csv --scan-row 3
--scan-row è a base 1 (la prima riga dopo l'intestazione è 1). Se lo ometti, il connector carica il CSV, mostra tutti gli host (IP/porta, stato di vulnerabilità, primo modello), ti fa scegliere l'indice e poi elenca i modelli scoperti così puoi selezionare con quale parlare. Selezionare 0 durante la richiesta del modello salta a un nuovo fetch di /api/tags, quindi il comportamento originale del connector funziona anche se il CSV è obsoleto o vuoto.
ollamaScraper.py è un semplice strumento che conserva un file token .shodan_api, chiede un paese (o globale), permette di scegliere tra vari dork Shodan già pronti (o una query personalizzata), quindi scorre le pagine di Shodan finché non interrompi o raggiungi un limite di host definito dall'utente. Ogni IP viene scritto in results/scraper/targets.txt, così lo scanner può riutilizzare subito l'output. Se desideri, puoi indicare una cartella diversa con --output-dir.
Offre inoltre un filtro facoltativo per azienda/organizzazione che aggiunge org:"Company" al dork e stampa un avviso a colpire solo sistemi di tua proprietà o per cui hai esplicita autorizzazione al test.
--skip-scrape, --skip-scan, --skip-connect per riprendere parti della pipeline--targets per scegliere il file dei target condiviso--ports, --scan-concurrency, --scan-timeout per regolare la fase di scansione--scan-output-prefix, --scan-output-dir per controllare l'output CSV dello scanner--scan-gen-ok-only, --scan-vuln-only, --scan-show-unknown per i filtri dello scanner--scan-csv per riutilizzare un CSV dello scanner esistente quando si salta la scansioneIl Navigator estrae le dimensioni dei parametri da nomi di modello come 7B, 13b o 500m. La dimensione più alta per host viene mostrata nella tabella e usata per ordinamento/filtri (--min-params / --max-params).
OllamaHound è pensato per la sicurezza difensiva e offensiva autorizzata:
7h30th3r0n3
ScannerScoperta asincrona su larga scala, fingerprinting delle versioni, classificazione CVE, probing dei modelli.
|
ConnectorClient CLI interattivo con interfaccia ricca (Rich UI) per parlare con un'istanza Ollama scoperta.
|
ScraperRaccoglitore di target basato su Shodan che genera
|
NavigatorStrumento di ricerca/filtro per i CSV dello scanner con esportazioni e menu interattivo.
|
OrchestratorCollega scraper → scanner → connector, passando ciascun output al successivo.
|
RisultatiGli output si trovano in |
POST /api/generate/api/generate restituisce HTTP 200 salgono in cima--gen-ok-only mantiene solo gli host con /api/generate funzionante--vuln-only mantiene solo gli host classificati RCE/DoS--show-unknown include gli host con versioni sconosciute/non interpretabili--connector-row per selezionare automaticamente una riga all'avvio del connector| Modulo | Output | Posizione predefinita |
|---|
| Scraper | Elenco dei target | results/scraper/targets.txt |
| Scanner | CSV con timestamp | results/scanner/<prefix>_YYYYMMDD_HHMMSS.csv |
| Navigator | Esportazioni opzionali JSON/CSV | navigator_results.json / navigator_results.csv |
| Orchestrator | Target + CSV dello scanner | results/orchestrator/targets.txt + results/scanner/ |