
Reconocimiento masivo, identificación de versiones, probador de CVE y marco de explotación en vivo para instancias abiertas de Ollama.
Kit modular para descubrir servidores Ollama expuestos, identificar versiones y validar acceso a modelos.
OllamaHound es un kit modular orientado a RedTeam para descubrir servidores Ollama expuestos públicamente, identificar versiones, clasificar exposición a CVE, validar si es posible generar texto, y (opcionalmente) habilitar una sesión CLI interactiva para pruebas controladas.
@@@@@@@@@@@@@@@@@@@@@@@@@@@#*#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@%.-+-:#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@+--=%@@@@@@@@-.@@@+ #@@@@@@@@@@@@@@@@@ @@@@@@@@@@@= %%+.=@@@%###-.@@@@= %@@@@@@@@@@@@@@@@ @@@@@@@@@@@-.@@@@..--====-.=@@@@.-@@@@@@@@@@@@@@@@ @@@@@@@@@@@# +#+-:*%@@@@@@@@@@@@- +@@@@@@@@@@@@@@@ @@*@@@@@#*+=:::.-*%@@@@@@@@@@@@@@%::%@@@@@@@@@@@@@ @+:-@@*----=***+==-=#@@@@@@@@@@@@@@::@@@@@@@@@@@@@ @*+#@=-==+=%@@@@%#=+:*%%%@@@@#++%@@+ %@@@@@@@@@@@@ +:=@#.+-@#=#@%+++%@:* =++==*@- *@@-.@@@@@@@@@@@@@ %=+@+--*@@*=##+++%#.+::=@#%:+@%@@@@%.=@@@@@@@@@@@@ @@@@#.+-@@%=*@@@@@+.* =-:*@-=@@@@@@@* %@@@@@@@@@@@ @@@@@+:==#*=%@@@@*-=.:--+*-=@@@@@@@@+ %@@@@@@@@@@@ @@@@@@#=----+*++=--=**++*#%@@@@@@@@% =@@@@@@@@@@@@ @@@@@@@@%*-:---.+*%@@@@@@@@@@@@@@@@+-:+@@@@@@@@@@@ @@@@@@@@@@# ==:.%@@@@@@@@@@@@@@@@@@@@%.-@@@@@@@@@@ @@@@@@@@@@#.@@:.#@@@@@@@@@@@@@@#@@@@@@% *@@@@@@@@@ @@@@@@@@@*::--::=%@@@@@@@@@@@@::@@@@@@@ =@@@@@@@@@ @@@@@@@@-.#@@@@@-.@@@@@@@@@@#.-@@@@@@@@*.-@@@@@@@@ @@@@@@@@.-@@@@@%::@@@@@@@@%=.+@@@@@@@@@@%.-@@@@@@@ @@@@@@@@#::++=::+@@@@@@@%=:=%@@@@@%%@@@@@+ @@@@@@@ @@@@@@@@@@=.:: #@@@@@@@=.+@@@@@@%=:*@@@@@= @@@@@@@ @@@@@@@@@@@@%-.%@@@@@@# *@@@@@#-:+@@@@@@% +@@@@@@@ @@@@@@@@@@@@@.=@@@@@@@@=:===---*@@@@@@@@@.=@@@@@@@ @@@@@@@@@@@@@=.%@@@@@@@@#-##%@@@@@@@@@@@@.-@@@@@@@ @@@@@@@@@@@@@@= -%@@@@@@# #@@@@@@@@@@@@@# #@@@@@@@ @@@@@@@@@@@@@@@ .:=*%%@%#..*@@@@@@@@@@@+.+@@@@@@@@ @@@@@@@@@@@@@@@.=@*==- -=*. --==+*#**=:-#@@@@@@@@@ @@@@@@@@@@@@@@@:-@@@@# #@@+ %%##*..++#%@@@@@@@@@@@ @@@@@@@@@@@@@@@::@@@@-.@@@% *@@@@-:@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@*.=++::%@@@@::%@%+ *@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@%***%@@@@@@%=---=%@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@---OllamaHound---@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@---By 7h30th3r0n3---@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!!! ADVERTENCIA !!!
⚠️ Aviso legal y ético
Este proyecto está destinado a evaluaciones de seguridad autorizadas (redes internas, compromisos con alcance definido, entornos de laboratorio).
Úselo solo en sistemas que posea o sobre los cuales tenga permiso explícito por escrito.
Al usar este software, acepta que es el único responsable de sus acciones.
El/los autor(es) y colaboradores proporcionan este software "tal cual" y rechazan toda responsabilidad
por cualquier uso indebido, daño o consecuencia legal derivada de su uso.
/api/tags y /api/generateresults/scraper/targets.txtresults/scanner/<prefijo>_YYYYMMDD_HHMMSS.csvPuede hacer esto paso a paso o ejecutar el Orquestador para encadenar las tres primeras etapas.
asyncio + aiohttp (miles de sockets en vuelo)rich<prefijo>_YYYYMMDD_HHMMSS.csvGET /api/version → fallback GET /version → fallback cabecera Server< 0.1.47<= 0.3.14GET /api/tagsaiohttprichpackagingrequestsshodanInstalar dependencias:
python3 -m pip install -U aiohttp rich packaging requests shodan
Usar Docker:
docker build -t ollamahound .
docker run -it --rm ollamahound <ollamahound scripts>
Opción A (más rápida): raspar → escanear → conectar
python3 ollamaScraper.py
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
python3 ollamaConnector.py --scan-csv results/scanner/ollama_scan_*.csv
Opción B (de una sola vez): tubería del orquestador
python3 ollamaOrchestrator.py --scan-gen-ok-only
ollamaOrchestrator.py simplemente ejecuta el raspador, luego el escáner y luego el conector, de modo que pueda pasar de la cosecha de Shodan a un CLI interactivo con un solo comando. El raspador y el conector siguen siendo interactivos, pero el orquestador conecta sus salidas por usted.
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
results/orchestrator/targets.txt (cambie con --targets).results/scanner/ con el prefijo de --scan-output-prefix (por defecto orchestrator_scan).--connector-row para seleccionar automáticamente una fila al iniciar el conector, o elija interactivamente como de costumbre.--skip-scrape, --skip-scan y --skip-connect le permiten reanudar desde un punto intermedio usando salidas existentes (se requiere --scan-csv al omitir la fase de escaneo).El resto de esta sección sigue siendo aplicable si desea ejecutar cada módulo manualmente.
Raspador:
# Raspado interactivo básico (selector de dork de Shodan)
python3 ollamaScraper.py
# Carpeta de salida personalizada + nombre de archivo
python3 ollamaScraper.py --output-dir results/my-scrape -o targets_acme.txt
Escáner:
# Escanear targets.txt (por defecto 11434, 500 concurrencia, 8s tiempo de espera)
python3 ollamaScanner.py results/scraper/targets.txt
# Solo hosts donde /api/generate devuelve 200
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
# Escaneo multipuerto (mezcla de espacios y comas)
python3 ollamaScanner.py results/scraper/targets.txt -p 11434 8080,13871
# Barrido agresivo (tiempo de espera corto + alta concurrencia)
python3 ollamaScanner.py results/scraper/targets.txt --timeout 3 -c 800
# Mantener solo hosts vulnerables (RCE/DoS) y versiones desconocidas
python3 ollamaScanner.py results/scraper/targets.txt --vuln-only --show-unknown
# Prefijo CSV personalizado + directorio de salida
python3 ollamaScanner.py results/scraper/targets.txt -o scan_acme.csv --output-dir results/scanner_acme
Navegador:
# Filtrar un directorio de CSVs del escáner
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce
# Filtrar un solo CSV, restringir a modelos llama, tamaño >= 7B
python3 ollamaNavigator.py --scan-csv results/scanner/scan_20260107_180002.csv \
--model llama --min-params 7
# Excluir modelos + palabras clave de búsqueda
python3 ollamaNavigator.py --scan-csv results/scanner --exclude-model qwen --search france
# Exportar filas filtradas
python3 ollamaNavigator.py --scan-csv results/scanner --vuln dos \
--json-output results/navigator/dos.json --csv-output results/navigator/dos.csv
# Menú de filtro interactivo
python3 ollamaNavigator.py --scan-csv results/scanner --interactive
Conector:
# Conectar directamente
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
# Usar una fila del CSV del escáner (índice basado en 1)
python3 ollamaConnector.py --scan-csv results/scanner/scan_20260107_180002.csv --scan-row 3
Orquestador:
# Tubería completa
python3 ollamaOrchestrator.py
# Tubería completa + solo gen-ok + solo vulnerable
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
# Reutilizar objetivos y CSV existentes, solo ejecutar conector
python3 ollamaOrchestrator.py --skip-scrape --skip-scan --scan-csv results/scanner/scan_20260107_180002.csv
# Omitir conector (solo raspar + escanear)
python3 ollamaOrchestrator.py --skip-connect
targets.txt puede contener uno por línea:
192.0.2.1010.0.0.0/24ollama.example.orgSi genera la lista con el raspador, apunte el escáner a results/scraper/targets.txt (o la ruta que haya seleccionado con --output-dir).
ollamaScraper.py puede construir results/scraper/targets.txt por usted consultando Shodan:
python3 ollamaScraper.py
El script almacena en caché su clave API en .shodan_api, le permite elegir un dork (global o por país), y agrega cada resultado a results/scraper/targets.txt mientras imprime contexto básico. Opcionalmente puede añadir un filtro org:"Company" para reducir los resultados. Ctrl+C o alcanzar el límite máximo de IPs detiene la ejecución. Use --output-dir / -o para cambiar la carpeta o el nombre del archivo, luego pase esa ruta al escáner.
Mostrar solo hosts donde /api/generate devuelve HTTP 200:
python3 ollamaScanner.py targets.txt --gen-ok-only
Barrido más agresivo (tiempo de espera corto + alta concurrencia):
python3 ollamaScanner.py targets.txt --gen-ok-only --timeout 3 -c 800
Ejemplo de barrido completo:
11434 y 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
Los CSV del escáner ahora se guardan en results/scanner/. Use --output-dir si desea dirigir los archivos a otro lugar (la carpeta se crea automáticamente).
El escáner imprime una tabla rich con:
? si es desconocida)rce, dos, patched, unknown)tags, generate, show)Se escribe automáticamente un CSV con marca de tiempo, por ejemplo:
ollama_scan_20260107_180002.csv
Campos:
ip, port, version, vuln, tags, generate, show, modelsUse el navegador para filtrar, ordenar y exportar resultados de un solo CSV o de todo un directorio de salidas del escáner (deduplicadas por host/puerto, modelos fusionados).
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce --model llama
--scan-csv acepta un solo archivo CSV o un directorio de salidas del escáner.params (por defecto), ip o version.--interactive para un editor de filtros guiado por menús + exportaciones.--json-output o --csv-output.Conéctese a una instancia descubierta y reciba respuestas en flujo:
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
Si omite --model, el CLI obtiene /api/tags, lista todos los modelos que expone el servidor y le permite elegir por número. Cada indicación transmite tokens en cian hasta que el servidor finaliza o presiona Ctrl+C. Escriba exit / quit para salir.
También puede apuntar el conector a una fila dentro de un CSV del escáner para no tener que volver a escribir el host y el modelo:
python3 ollamaConnector.py --scan-csv scan_20260107_141056.csv --scan-row 3
--scan-row tiene base 1 (la primera línea después del encabezado es 1). Si lo omite, el conector carga el CSV, le muestra cada host (IP/puerto, estado de vulnerabilidad, primer modelo), le permite elegir el índice, luego lista los modelos descubiertos para que seleccione con cuál chatear. Seleccionar 0 durante la indicación del modelo salta a una obtención fresca de /api/tags, por lo que el comportamiento original del conector aún funciona si el CSV está desactualizado o vacío.
ollamaScraper.py es un ayudante simple que mantiene un archivo de token .shodan_api, solicita un país (o global), le permite elegir entre varios dorks de Shodan predefinidos (o una consulta personalizada), luego recorre las páginas de Shodan hasta que interrumpa o alcance un límite de hosts definido por el usuario. Cada IP se escribe en results/scraper/targets.txt, lo que significa que el escáner puede reutilizar la salida inmediatamente. Proporcione un directorio diferente mediante --output-dir si lo desea.
También ofrece un filtro opcional de empresa/organización que agrega org:"Company" al dork, e imprime una advertencia de que solo debe apuntar a sistemas que posea o sobre los cuales tenga permiso explícito para probar.
--skip-scrape, --skip-scan, --skip-connect para reanudar partes de la tubería--targets para elegir el archivo de objetivos compartido--ports, --scan-concurrency, --scan-timeout para ajustar el paso del escáner--scan-output-prefix, --scan-output-dir para controlar la salida CSV del escáner--scan-gen-ok-only, --scan-vuln-only, --scan-show-unknown para filtros del escáner--scan-csv para reutilizar un CSV del escáner existente al omitir el escaneoEl Navegador extrae tamaños de parámetros de nombres de modelos como 7B, 13b o 500m. El tamaño más alto por host se muestra en la tabla y se usa para ordenación/filtrado (--min-params / --max-params).
OllamaHound está diseñado para seguridad defensiva y ofensiva autorizada:
7h30th3r0n3
EscánerDescubrimiento asíncrono de alta escala, identificación de versiones, clasificación de CVE, sondeo de modelos.
|
ConectorCliente CLI interactivo con interfaz enriquecida para comunicarse con una instancia de Ollama descubierta.
|
RaspadorCosechador de objetivos basado en Shodan que construye
|
NavegadorAyudante de búsqueda/filtro para CSVs del escáner con exportaciones + menú interactivo.
|
OrquestadorEncadena raspador → escáner → conector, pasando cada salida a la siguiente.
|
ResultadosLas salidas se almacenan bajo |
POST /api/generate/api/generate devuelve HTTP 200 se colocan al principio--gen-ok-only mantiene solo hosts con /api/generate funcional--vuln-only mantiene solo hosts clasificados como RCE/DoS--show-unknown incluye hosts con versiones desconocidas/no analizables--connector-row para seleccionar automáticamente una fila al iniciar el conector| Módulo | Salida | Ubicación predeterminada |
|---|
| Raspador | Lista de objetivos | results/scraper/targets.txt |
| Escáner | CSV con marca de tiempo | results/scanner/<prefijo>_YYYYMMDD_HHMMSS.csv |
| Navegador | Exportaciones JSON/CSV opcionales | navigator_results.json / navigator_results.csv |
| Orquestador | Objetivos + CSV del escáner | results/orchestrator/targets.txt + results/scanner/ |