
استطلاع جماعي، بصمة الإصدار، اختبار CVE وإطار استغلال مباشر للمثيلات المفتوحة الخاصة بـ Ollama.
مجموعة أدوات معيارية لاكتشاف خوادم Ollama المكشوفة، وتحديد الإصدارات، والتحقق من صلاحية الوصول إلى النماذج.
أولاماهاوند (OllamaHound) هي مجموعة أدوات معيارية موجهة لفريق الاختراق (RedTeam) لـ اكتشاف خوادم Ollama المكشوفة للعموم، وتحديد الإصدارات، تصنيف قابلية التعرض لـ CVE، والتحقق مما إذا كان توليد النص ممكنًا، و(اختياريًا) تفعيل جلسة CLI تفاعلية لإجراء اختبارات مُحكَمة.
@@@@@@@@@@@@@@@@@@@@@@@@@@@#*#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@%.-+-:#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@+--=%@@@@@@@@-.@@@+ #@@@@@@@@@@@@@@@@@ @@@@@@@@@@@= %%+.=@@@%###-.@@@@= %@@@@@@@@@@@@@@@@ @@@@@@@@@@@-.@@@@..--====-.=@@@@.-@@@@@@@@@@@@@@@@ @@@@@@@@@@@# +#+-:*%@@@@@@@@@@@@- +@@@@@@@@@@@@@@@ @@*@@@@@#*+=:::.-*%@@@@@@@@@@@@@@%::%@@@@@@@@@@@@@ @+:-@@*----=***+==-=#@@@@@@@@@@@@@@::@@@@@@@@@@@@@ @*+#@=-==+=%@@@@%#=+:*%%%@@@@#++%@@+ %@@@@@@@@@@@@ +:=@#.+-@#=#@%+++%@:* =++==*@- *@@-.@@@@@@@@@@@@@ %=+@+--*@@*=##+++%#.+::=@#%:+@%@@@@%.=@@@@@@@@@@@@ @@@@#.+-@@%=*@@@@@+.* =-:*@-=@@@@@@@* %@@@@@@@@@@@ @@@@@+:==#*=%@@@@*-=.:--+*-=@@@@@@@@+ %@@@@@@@@@@@ @@@@@@#=----+*++=--=**++*#%@@@@@@@@% =@@@@@@@@@@@@ @@@@@@@@%*-:---.+*%@@@@@@@@@@@@@@@@+-:+@@@@@@@@@@@ @@@@@@@@@@# ==:.%@@@@@@@@@@@@@@@@@@@@%.-@@@@@@@@@@ @@@@@@@@@@#.@@:.#@@@@@@@@@@@@@@#@@@@@@% *@@@@@@@@@ @@@@@@@@@*::--::=%@@@@@@@@@@@@::@@@@@@@ =@@@@@@@@@ @@@@@@@@-.#@@@@@-.@@@@@@@@@@#.-@@@@@@@@*.-@@@@@@@@ @@@@@@@@.-@@@@@%::@@@@@@@@%=.+@@@@@@@@@@%.-@@@@@@@ @@@@@@@@#::++=::+@@@@@@@%=:=%@@@@@%%@@@@@+ @@@@@@@ @@@@@@@@@@=.:: #@@@@@@@=.+@@@@@@%=:*@@@@@= @@@@@@@ @@@@@@@@@@@@%-.%@@@@@@# *@@@@@#-:+@@@@@@% +@@@@@@@ @@@@@@@@@@@@@.=@@@@@@@@=:===---*@@@@@@@@@.=@@@@@@@ @@@@@@@@@@@@@=.%@@@@@@@@#-##%@@@@@@@@@@@@.-@@@@@@@ @@@@@@@@@@@@@@= -%@@@@@@# #@@@@@@@@@@@@@# #@@@@@@@ @@@@@@@@@@@@@@@ .:=*%%@%#..*@@@@@@@@@@@+.+@@@@@@@@ @@@@@@@@@@@@@@@.=@*==- -=*. --==+*#**=:-#@@@@@@@@@ @@@@@@@@@@@@@@@:-@@@@# #@@+ %%##*..++#%@@@@@@@@@@@ @@@@@@@@@@@@@@@::@@@@-.@@@% *@@@@-:@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@*.=++::%@@@@::%@%+ *@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@%***%@@@@@@%=---=%@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@---OllamaHound---@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@---By 7h30th3r0n3---@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!!! تحذير !!!
⚠️ إشعار قانوني وأخلاقي
هذا المشروع مخصص لتقييمات أمنية مصرح بها (الشبكات الداخلية، العمليات المحدودة النطاق، بيئات المختبر).
استخدمه فقط على الأنظمة التي تمتلكها أو التي لديك إذن خطي صريح لاختبارها.
باستخدامك لهذا البرنامج، فإنك توافق على أنك تتحمل وحدك مسؤولية أفعالك.
يقدم المؤلف (المؤلفون) والمساهمون هذا البرنامج "كما هو" ويتنصلون من أي مسؤولية
عن أي إساءة استخدام أو ضرر أو عواقب قانونية ناتجة عن استخدامه.
/api/tags و /api/generateresults/scraper/targets.txtresults/scanner/<prefix>_YYYYMMDD_HHMMSS.csvيمكنك القيام بذلك خطوة بخطوة أو تشغيل المنسّق لتسلسل المراحل الثلاث الأولى.
asyncio + aiohttp (آلاف المآخذ في نفس الوقت)rich<prefix>_YYYYMMDD_HHMMSS.csvGET /api/version → احتياطي GET /version → احتياطي رأس Server< 0.1.47<= 0.3.14GET /api/tagsaiohttprichpackagingrequestsshodanتثبيت التبعيات:
python3 -m pip install -U aiohttp rich packaging requests shodan
استخدم دوكر:
docker build -t ollamahound .
docker run -it --rm ollamahound <ollamahound scripts>
الخيار أ (الأسرع): كشط → مسح → اتصال
python3 ollamaScraper.py
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
python3 ollamaConnector.py --scan-csv results/scanner/ollama_scan_*.csv
الخيار ب (بأمر واحد): خط أنابيب المنسّق
python3 ollamaOrchestrator.py --scan-gen-ok-only
ollamaOrchestrator.py يقوم ببساطة بتشغيل الكاشطة ثم الماسح ثم الموصل بحيث يمكنك الانتقال من حصاد شودان إلى CLI تفاعلية بأمر واحد. تبقى الكاشطة والموصل تفاعليين، لكن المنسّق يربط مخرجاتهما معًا من أجلك.
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
results/orchestrator/targets.txt (غيّر باستخدام --targets).results/scanner/ بالبادئة من --scan-output-prefix (الافتراضي orchestrator_scan).--connector-row لتحديد صف تلقائيًا عند تشغيل الموصل، أو اختر صفًا تفاعليًا كالمعتاد.--skip-scrape و --skip-scan و --skip-connect تسمح لك باستئناف العمل جزئيًا باستخدام مخرجات موجودة (--scan-csv مطلوب عند تخطي مرحلة المسح).ما زال باقي هذا القسم ينطبق إذا كنت ترغب في تشغيل كل وحدة يدويًا.
الكاشطة:
# كشط تفاعلي أساسي (منتقي قناطر شودان)
python3 ollamaScraper.py
# مجلد إخراج + اسم ملف مخصص
python3 ollamaScraper.py --output-dir results/my-scrape -o targets_acme.txt
الماسح الضوئي:
# مسح targets.txt (المنفذ الافتراضي 11434، التزامن 500، مهلة 8 ثوانٍ)
python3 ollamaScanner.py results/scraper/targets.txt
# فقط المضيفات التي يُرجع فيها /api/generate الرمز 200
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
# مسح متعدد المنافذ (مسافة وفاصلة ممزوجة)
python3 ollamaScanner.py results/scraper/targets.txt -p 11434 8080,13871
# مسح عدواني (مهلة قصيرة + التزامن عالي)
python3 ollamaScanner.py results/scraper/targets.txt --timeout 3 -c 800
# احتفظ فقط بالمضيفات المعرضة للخطر (RCE/DoS) والإصدارات غير المعروفة
python3 ollamaScanner.py results/scraper/targets.txt --vuln-only --show-unknown
# بادئة CSV مخصصة + مجلد إخراج
python3 ollamaScanner.py results/scraper/targets.txt -o scan_acme.csv --output-dir results/scanner_acme
المُتجوّل:
# تصفية مجلد من ملفات CSV للماسح
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce
# تصفية ملف CSV واحد، قصر على نماذج llama، الحجم >= 7B
python3 ollamaNavigator.py --scan-csv results/scanner/scan_20260107_180002.csv \
--model llama --min-params 7
# استبعاد النماذج + كلمات البحث
python3 ollamaNavigator.py --scan-csv results/scanner --exclude-model qwen --search france
# تصدير الصفوف المصفاة
python3 ollamaNavigator.py --scan-csv results/scanner --vuln dos \
--json-output results/navigator/dos.json --csv-output results/navigator/dos.csv
# قائمة تصفية تفاعلية
python3 ollamaNavigator.py --scan-csv results/scanner --interactive
الموصل:
# اتصال مباشر
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
# استخدام صف من ملف CSV للماسح (فهرس يبدأ من 1)
python3 ollamaConnector.py --scan-csv results/scanner/scan_20260107_180002.csv --scan-row 3
المنسّق:
# خط أنابيب كامل
python3 ollamaOrchestrator.py
# خط أنابيب كامل + فقط gen-ok + vuln-only
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
# إعادة استخدام الأهداف وملف CSV موجودين، تشغيل الموصل فقط
python3 ollamaOrchestrator.py --skip-scrape --skip-scan --scan-csv results/scanner/scan_20260107_180002.csv
# تخطي الموصل (كشط + مسح فقط)
python3 ollamaOrchestrator.py --skip-connect
targets.txt قد يحتوي على واحد لكل سطر:
192.0.2.1010.0.0.0/24ollama.example.orgإذا قمت بإنشاء القائمة باستخدام الكاشطة، وجّه الماسح إلى results/scraper/targets.txt (أو أي مسار اخترته باستخدام --output-dir).
يمكن لـ ollamaScraper.py بناء results/scraper/targets.txt لك عن طريق الاستعلام عن شودان:
python3 ollamaScraper.py
يقوم البرنامج النصي بتخزين مفتاح API الخاص بك مؤقتًا في .shodan_api، ويسمح لك باختيار قنطرة (عالمية أو حسب الدولة)، ويضيف كل نتيجة إلى results/scraper/targets.txt مع طباعة سياق أساسي. يمكنك اختياريًا إضافة مرشح org:"Company" لتضييق النتائج. يؤدي الضغط على Ctrl+C أو الوصول إلى الحد الأقصى لعدد عناوين IP إلى إيقاف التشغيل. استخدم --output-dir / -o لتغيير المجلد أو اسم الملف، ثم مرّر هذا المسار إلى الماسح.
اعرض فقط المضيفات التي يُرجع فيها /api/generate الرمز HTTP 200:
python3 ollamaScanner.py targets.txt --gen-ok-only
مسح عدواني أكثر (مهلة قصيرة + التزامن عالي):
python3 ollamaScanner.py targets.txt --gen-ok-only --timeout 3 -c 800
مثال مسح كامل:
11434 و 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
تصل ملفات CSV الخاصة بالماسح الآن تحت results/scanner/. استخدم --output-dir إذا كنت ترغب في توجيه الملفات إلى مكان آخر (يتم إنشاء المجلد تلقائيًا).
يطبع الماسح جدول rich يتضمن:
? إذا كان غير معروف)rce، dos، patched، unknown)tags، generate، show)يتم كتابة ملف CSV بصيغة زمنية تلقائيًا، على سبيل المثال:
ollama_scan_20260107_180002.csv
الحقول:
ip, port, version, vuln, tags, generate, show, modelsاستخدم المتجوّل لتصفية النتائج وفرزها وتصديرها من ملف CSV واحد أو مجلد كامل من مخرجات الماسح (إزالة التكرار حسب المضيف/المنفذ، دمج النماذج).
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce --model llama
--scan-csv يقبل ملف CSV واحد أو مجلد من مخرجات الماسح.params (افتراضي)، ip، أو version.--interactive للحصول على محرر تصفية قائم على القوائم + التصدير.--json-output أو --csv-output.اتصل بمثيل مكتشف واستقبل الردود:
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
إذا حذفت --model، يقوم CLI بجلب /api/tags، ويسرد كل نموذج يعرضه الخادم، ويسمح لك بالاختيار برقم. يقوم كل استعلام ببث الرموز (tokens) باللون السماوي حتى ينتهي الخادم أو تضغط على Ctrl+C. اكتب exit / quit للخروج.
يمكنك أيضًا توجيه الموصل إلى صف داخل ملف CSV للماسح حتى لا تضطر إلى إعادة كتابة المضيف والنموذج:
python3 ollamaConnector.py --scan-csv scan_20260107_141056.csv --scan-row 3
--scan-row هو فهرس يبدأ من 1 (أول سطر بعد الرأس هو 1). إذا حذفته، يقوم الموصل بتحميل ملف CSV، ويعرض لك كل مضيف (IP/port، حالة الثغرة، أول نموذج)، ويسمح لك باختيار الفهرس، ثم يسرد النماذج المكتشفة لتختار أي واحد تتحدث معه. اختيار 0 أثناء استعلام النموذج يؤدي إلى جلب جديد لـ /api/tags، لذا يظل سلوك الموصل الأصلي يعمل إذا كان ملف CSV قديمًا أو فارغًا.
ollamaScraper.py هو مساعد بسيط يحتفظ بملف رمز .shodan_api، ويطلب اسم دولة (أو عالمي)، ويسمح لك بالاختيار من عدة قناطر جاهزة لشودان (أو استعلام مخصص)، ثم يتنقل عبر صفحات شودان حتى تقاطع أو تصل إلى حد المضيف الذي حددته. يتم كتابة كل IP إلى results/scraper/targets.txt، مما يعني أن الماسح يمكنه إعادة استخدام المخرجات فورًا. قم بتوفير دليل مختلف عبر --output-dir إذا رغبت.
كما أنه يقدم مرشح شركة/منظمة اختياري يلحق org:"Company" بالقنطرة، ويطبع تحذيرًا باستهداف الأنظمة التي تمتلكها فقط أو لديك إذن صريح لاختبارها.
--skip-scrape, --skip-scan, --skip-connect لاستئناف أجزاء من خط الأنابيب--targets لاختيار ملف الأهداف المشترك--ports, --scan-concurrency, --scan-timeout لضبط خطوة الماسح--scan-output-prefix, --scan-output-dir للتحكم في مخرجات CSV للماسح--scan-gen-ok-only, --scan-vuln-only, --scan-show-unknown لمرشحات الماسح--scan-csv لإعادة استخدام ملف CSV موجود للماسح عند تخطي المسح--connector-row لتحديد صف تلقائيًا عند تشغيل الموصليستخرج المتجوّل أحجام المعلمات من أسماء النماذج مثل 7B, 13b, أو 500m. يتم عرض الحجم الأعلى لكل مضيف في الجدول واستخدامه للفرز/التصفية (--min-params / --max-params).
أداة أولاماهاوند مبنية لأغراض الأمان الدفاعي والاختراق المأذون به:
7h30th3r0n3
الماسح الضوئي (Scanner)اكتشاف غير متزامن عالي النطاق، وتحديد الإصدارات، وتصنيف CVE، واختبار النماذج.
|
الموصل (Connector)عميل CLI تفاعلي بواجهة غنية للتحدث مع مثيل Ollama مكتشف.
|
الكاشطة (Scraper)حصاد الأهداف المدعوم من شودان والذي يبني
|
المُتجوّل (Navigator)أداة بحث/تصفية لملفات CSV الخاصة بالماسح مع إمكانية التصدير وقائمة تفاعلية.
|
المنسّق (Orchestrator)يُسلسل الكاشطة ← الماسح ← الموصل، ويمرر كل مخرجات إلى التي تليها.
|
النتائج (Results)المخرجات موجودة تحت |
POST /api/generate/api/generate HTTP 200 تتصدر القائمة--gen-ok-only يحتفظ فقط بالمضيفات التي يعمل فيها /api/generate--vuln-only يحتفظ فقط بالمضيفات المصنفة RCE/DoS--show-unknown يشمل المضيفات ذات الإصدارات غير المعروفة/غير القابلة للتحليل| الوحدة | المخرج | الموقع الافتراضي |
|---|
| الكاشطة | قائمة الأهداف | results/scraper/targets.txt |
| الماسح الضوئي | CSV بصيغة زمنية | results/scanner/<prefix>_YYYYMMDD_HHMMSS.csv |
| المُتجوّل | تصدير اختياري إلى JSON/CSV | navigator_results.json / navigator_results.csv |
| المُنسّق | الأهداف + CSV للماسح | results/orchestrator/targets.txt + results/scanner/ |