
إطار عمل معياري لاكتشاف الأصول مكتوب بلغة بايثون لأتمتة العمل اليدوي المتكرر
Cygor هو إطار عمل نمطي لاكتشاف الأصول يجمع بين المسح والتحليل وتعداد الخدمات في سير عمل واحد. فهو يستبدل مجموعة الأدوات المنفصلة بعملية آلية تتولى الاكتشاف والإثراء والتعداد الموجّه بسلاسة — مما يقلل العبء اليدوي ويتيح لك التركيز على النتائج بدلاً من إدارة الأدوات.
توفر واجهة الويب الخاصة بـ Cygor مركز قيادة مرئيًا موحّدًا ينظّم فوضى بيانات المسح الأولية. فبدلاً من البحث في ملفات XML أو JSON أو النصوص المسطحة التي لا نهاية لها، يتم تحليل النتائج وإثراؤها وعرضها تلقائيًا في مساحة واحدة مصممة للفرز السريع واتخاذ القرار.
بفضل FastAPI و Bootstrap 5، تتيح لوحة المعلومات ما يلي بسهولة:
واجهة الويب ليست للعرض فقط — بل تهدف إلى الكفاءة والوضوح. فمن خلال جمع كل البيانات في مساحة عمل تفاعلية واحدة، تقلّل الوقت المستغرق في تحليل الملفات أو مواءمة المخرجات، وتتيح للمختبرين التركيز على ما يهم: فهم البيئة والتفاعل معها.
الكثير من الأدوات والتقنيات والأساليب التي أصنعها مستوحاة من عالم Spawn. إذا لم تكن قد قرأت أي قصة مصورة من Spawn من قبل، فلا بأس؛ سأشارك بعض المعلومات حول سبب اختياري لهذه الشخصية لتصبح اسم هذه الأداة.
اسم Cygor مستوحى من Cy-Gor، وهو بطل مضاد مأساوي في عالم Spawn. كان مايكل كونيتشني — عميل حكومي وصديق مقرب من آل سيمونز — قد حاول كشف الفساد بعد مقتل سيمونز. ومع ذلك، تم القبض عليه وإجباره على المشاركة في مشروع Sim، تجارب الدكتور فريدريك ويلهايم على القرود، حيث تم دمج جسد غوريلا مع عقل كونيتشني عبر التحكم الآلي الاختراقي. وكانت النتيجة الوحش المعروف باسم Cy-Gor — اختصارًا لـ Cybernetic Gorilla.
بعد هروبه من الأسر، شنّ Cy-Gor هجمات عنيفة، حتى أنه اخترق مراكز بيانات حكومية في نوبات من الارتباك والغضب. ورغم أنه طورد وأُعيد أسره عدة مرات، إلا أنه في النهاية قاوم الأنظمة التي سعت للسيطرة عليه — فأزال الغرسات التعقبية وحرر نفسه ليشق طريقه الخاص، ممزقًا بين الآلة والوحش والإنسان.
webenum (يتم تشغيل الأدوات المثبتة فقط).هناك عدة طرق مدعومة لتثبيت Cygor: pip و pipx و uv و docker.
بعض التبعيات (مثل gssapi الخاصة بـ Kerberos/WinRM) تُنشئ امتدادات C، لذا قم أولاً بتثبيت مجموعة أدوات البناء وملفات رؤوس Kerberos:
# Debian/Ubuntu/Kali:
sudo apt install -y build-essential python3-dev libkrb5-dev
# Stable version:
pipx install cygor
# Install from source:
git clone https://github.com/tjnull/cygor
cd cygor
pipx install .
إعداد Docker الخاص بـ Cygor يشمل التطبيق وخدمة قاعدة بيانات PostgreSQL معًا. يتحول النظام تلقائيًا إلى SQLite إذا كانت PostgreSQL غير متوفرة.
الإنتاج (موصى به):
# Option 1: Use the wrapper script (automatically handles port conflicts)
./docker-compose-up.sh up --build
# Option 2: Direct docker compose (uses default ports)
docker compose up --build
التطوير (مع تثبيت الكود المصدري):
# Option 1: Use the wrapper script (automatically handles port conflicts)
./docker-compose-up.sh dev up --build
# Option 2: Direct docker compose (uses default ports)
docker compose -f docker-compose-dev.yaml up --build
يتضمن إعداد Docker Compose ما يلي:
results/: مخرجات المسح ونتائج credrecon وملفات قاعدة البياناتcygor-config/: وحدة تخزين التكوين المحلي (تُنشأ تلقائيًا)افتراضيًا:
5432 (إذا كان متاحًا)5434 (إذا كان متاحًا)5432 داخليًا (شبكة Docker)إذا كانت المنافذ مستخدمة، يمكنك:
استخدام السكربت المُغلّف (wrapper) (موصى به - يكتشف المنافذ المتاحة تلقائيًا):
./docker-compose-up.sh up --build
تعيين المنفذ يدويًا:
export POSTGRES_HOST_PORT=5435
docker compose up --build
إزالة تعيين المنفذ (إذا لم تكن بحاجة إلى وصول خارجي إلى PostgreSQL):
علّق على قسم ports: في ملف docker-compose.yaml
لبناء صورة Docker يدويًا:
docker build -t cygor .
تشغيل حاوية واحدة (بدون خدمة PostgreSQL):
docker run --rm -v ./results:/opt/cygor/results \
-e CYGOR_RESULTS_DIR=/opt/cygor/results \
cygor web --host 0.0.0.0 --port 8080 --load-dir /opt/cygor/results
CYGOR_DB_URL)متغيرات البيئة الأساسية لـ Docker:
البيانات ومساحة العمل:
CYGOR_RESULTS_DIR: دليل النتائج (الافتراضي: /opt/cygor/results)CYGOR_WORKSPACE: دليل مساحة العمل (الافتراضي: /opt/cygor/results)CYGOR_RESULTS_PATH: مسار المضيف لحجم النتائج (الافتراضي: ./results)CYGOR_CONFIG_PATH: مسار المضيف لحجم تكوين المصادقة (الافتراضي: ./cygor-config)قاعدة البيانات:
CYGOR_DB_URL: سلسلة اتصال قاعدة البيانات (يتم تعيينها تلقائيًا بواسطة docker-compose)CYGOR_DB_USER: مستخدم قاعدة بيانات PostgreSQL (الافتراضي: cygor)CYGOR_DB_PASSWORD: كلمة مرور قاعدة بيانات PostgreSQLPOSTGRES_HOST_PORT: تعيين منفذ مضيف PostgreSQL (لحل تعارض المنافذ)التصحيح والتفصيل:
CYGOR_DEBUG: تفعيل وضع التصحيح (اضبطه على 1 للتفعيل)CYGOR_VERBOSE: مستوى التفصيل (0=عادي، 1=مفصّل، 2=تصحيح)توجد الأدلة المفصلة في cygor/wiki/ — التثبيت، وحدات التعداد المدمجة الإحدى عشرة، تطوير الإضافات، إدارة مساحات العمل، والمزيد. يعرض GitHub الدليل كموقع توثيق قابل للتصفح (ابدأ من cygor/wiki/README.md). كما يتم تقديم الصفحات نفسها عبر واجهة الويب في /docs بمجرد تشغيل cygor web start.
استخدم أمر Cygor الرئيسي للوصول إلى الأدوات المتاحة. لكل أمر فرعي شاشة مساعدة خاصة به (Cygor --help) توثق الخيارات والإجراءات.
tjnull@kali:~$ cygor
Usage:
cygor <command> [args]
Commands:
banner Cygor tool banner (Warning it is large!)
scan Automated scanner to discover hosts and services. (Will require root/sudo privileges for scanning).
parse Analyze a NMAP scan file (nmap, gnmap, xml) and extract categorized hostlists by common service.
enum Loads enumeration modules that are located in the cygor modules directory.
workspace Manage workspaces (init/set-default/show).
web Control/launch the Cygor Web UI (start/stop/status) or run directly.
Environment:
CYGOR_WORKSPACE Override default workspace just for this run.
CYGOR_RESULTS_DIR Used by web and modules if set. (Auto-set from default workspace.)
ستحتاج إلى صلاحيات sudo (root) لتشغيل الماسح في cygor:
Run host discovery with Masscan only:
cygor scan -i eth0 -f scope.txt --discover masscan
Run host discovery with both Masscan and Naabu, then Nmap on merged results:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --nmap-source merge
Discovery only (no Nmap), save results in results/discovery/:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --discover-only
Reuse saved discovery results for Nmap top ports scan:
cygor scan --use-discovery results/discovery/merged-discovered.txt --scan-type top-ports
Run Nmap with custom ports on discovered hosts:
cygor scan --use-discovery results/discovery/masscan-discovered.txt --ports 80,443,8443
Run Nmap with 10 parallel processes on full scope (Max is 100):
\cygor scan -i eth0 -f scope.txt --discover naabu --processes 10 --scan-type fullscan:
Run Cygor to discover hosts and scan them with Nmap with a provided lists of IP Addresses or CDRs:
cygor scan -i eth0 --ips 10.10.10.1 10.10.10.5 10.10.20.0/24 --discover naabu --processes 10 --scan-type fullscan
Exclude specific subnets or hosts from scan:
cygor scan -i eth0 -f scope.txt --exclusions exclusions.txt --discover masscan
Parse a directory of Nmap results and print hostlists:
cygor parse results/nmap
Parse a single XML and write hostlists to results/parsed-hostlists:
cygor parse results/nmap/scan1.xml -o results
Recursively parse .xml/.nmap/.gnmap files and write outputs:
cygor parse /path/to/scans --out-dir results
يأتي Cygor مع مجموعة متزايدة من وحدات التعداد الخاصة بالبروتوكولات. كل وحدة تغلّف أدوات مجرّبة، وتحلل المخرجات إلى صفوف مصنفة ("parse-don't-dump")، وتضع النتائج في المخزون (قاعدة البيانات + واجهة الويب) حيث يمكن البحث فيها وربطها بالمضيف. كما يتم تغذية الملاحظات عالية الإشارة تلقائيًا إلى محرك الخطوات التالية، الذي يعرض النتائج ذات الأولوية والأوامر الجاهزة للتنفيذ في واجهة الويب.
List all available modules:
cygor enum --list
Run lockon against an http hostlist:
cygor enum lockon web -f results/parsed-hostlists/http/http-hostlist.txt -o results/enum/lockon
Run web content discovery (multi-tool, with screenshots):
cygor enum webenum -f results/parsed-hostlists/http-https/http-https-hostlist.txt --screenshot
Run nfsexplorer against NFS targets (exports only):
cygor enum nfsexplorer -i results/parsed-hostlists/nfs/nfs-hostlist.txt --info
Run smbexplorer and list files:
cygor enum smbexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --list-files
Enumerate MSRPC (null session) with password policy + RID cycling:
cygor enum rpcexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --rid-cycle
Probe databases for unauthenticated access (point at any DB service hostlist):
cygor enum dbprobe -i results/parsed-hostlists/mysql/mysql-hostlist.txt
شغّل cygor enum <module> --help للحصول على مرجع الخيارات الكامل لكل وحدة.
Cygor قابل للتوسعة — ضع ملف Python في ~/.cygor/plugins/ وسيظهر ضمن cygor enum --list (وفي واجهة الويب) مثل أي وحدة مدمجة. يمكنك تغليف أدواتك الخاصة، أو توزيع ماسحات داخلية بين فريقك، أو توسعة Cygor لاختبار محدد دون عمل fork.
Scaffold a new plugin (writes ~/.cygor/plugins/my_scanner.py):
cygor plugin create "My Scanner"
Install a plugin from a local file or a git URL:
cygor plugin install ./my_scanner.py
cygor plugin install https://github.com/example/cygor-myscanner
Validate, list, update, remove:
cygor plugin validate ./my_scanner.py
cygor plugin list
cygor plugin update --all
cygor plugin remove my_scanner
Run an installed plugin (same as a built-in module):
cygor enum my_scanner -t 10.10.10.5
توجد ثلاث إضافات مرجعية في docs/examples/modules/: مثال بسيط، وغلاف لأداة خارجية، وقالب كامل مشروح. راجع دليل تطوير الإضافات للتعرف على تنسيق الإضافة الكامل، والخيارات/الأعمدة/العروض، والتعامل مع التبعيات، وتوافق الإصدارات، وقائمة السماح الاختيارية للإضافات.
بعد جمع البيانات، يمكنك تحميلها إلى واجهة الويب الخاصة بـ Cygor لتحويل نتائج المسح إلى تصور واضح للمضيفين والخدمات والنتائج الرئيسية الأخرى. سينشئ Cygor ملفًا باسم cygor.db يحتوي على البيانات اللازمة لنمذجتها في واجهة الويب الخاصة بـ Cygor
# Basic usage - start on default host/port (127.0.0.1:8000)
cygor web start
# Start on all interfaces, port 8080
cygor web start -H 0.0.0.0 -p 8080
# Start with custom results directory
cygor web start --load-dir /path/to/results
# Start with verbose output
cygor web start -vv
# Start with all options
cygor web start -H 0.0.0.0 -p 8080 --load-dir ~/scan-results -vv
شغّل cygor web start --help للحصول على القائمة الكاملة للخيارات.
# Check if the web server is running
cygor web status
# Stop a running web server
cygor web stop
يكتشف Cygor تلقائيًا ويستخدم PostgreSQL إذا كانت متوفرة، وإلا يتحول إلى SQLite:
PostgreSQL (موصى بها للإنتاج):
psql متاحًاpostgresql+psycopg_async://user:pass@host/dbSQLite (الخيار الاحتياطي الافتراضي):
cygor.db في دليل النتائجCygor هو إطار عمل للأبحاث الأمنية والتعليم. صُمم ليُستخدم فقط في البيئات التي لديك فيها إذن صريح ومكتوب — مثل اختبارات الاختراق، وعمليات الفرق الحمراء، والمختبرات التعليمية، أو نطاقات الاختبار الشخصية.
يجب عدم استخدام هذا البرنامج للوصول غير المصرح به، أو الاقتحام، أو تعطيل الأنظمة التي لا تملكها أو لا تتحكم فيها. قد يؤدي القيام بذلك إلى انتهاك القوانين واللوائح في منطقتك، وقد ينتج عنه ملاحقة جنائية أو عقوبات مدنية.
بتحميل Cygor أو تشغيله أو تعديله، فإنك توافق على ما يلي:
لا يتحمل مؤلفو Cygor والمساهمون فيه أي مسؤولية عن سوء الاستخدام أو الضرر أو العواقب الناشئة عن استخدام هذا البرنامج.
إذا لم تكن متأكدًا مما إذا كان لديك إذن باستخدام Cygor في بيئة معينة، فلا تقم بتشغيله.
| الوحدة | الخدمة | الوظيفة |
|---|
lockon | HTTP/S, RDP, VNC, X11 | يلتقط لقطات شاشة عبر البروتوكولات للفرز البصري السريع. |
webenum | HTTP/S | اكتشاف محتوى متعدد الأدوات بالتوازي (ffuf, feroxbuster, gobuster, dirsearch) مع إزالة التكرار/الربط بين الأدوات ولقطات شاشة اختيارية. |
smbexplorer | SMB (445) | يعدّد المشاركات والصلاحيات والملفات القابلة للوصول؛ NTLM/Kerberos/pass-the-hash. |
nfsexplorer | NFS (2049) | يعدّد الصادرات والإصدارات والملفات؛ انتحال UID/GID وفحوصات no_root_squash. |
rpcexplorer | MSRPC (445) | جلسة فارغة/مصادقة: معلومات الخادم، وSID الخاص بالمجال، والمستخدمون، والمجموعات، وسياسة كلمة المرور الكاملة، وتدوير RID. |
ldapexplorer | LDAP/AD (389/636) | rootDSE وربط/بحث مجهول وتفريغ المجال الموثق. |
snmpexplorer | SNMP (161) | اختراق مجتمع v1/v2c، ومعلومات نظام الجهاز، ومسح MIB (المستخدمون/العمليات/البرامج/المنافذ/الواجهات). |
dnsexplorer | DNS (53) | الإصدار، وكشف المُحلل المفتوح، ونقل منطقة AXFR. |
ftpexplorer | FTP (21) | اللافتة، وتسجيل الدخول المجهول، وسرد الدليل، و FEAT، واختبار الكتابة المجهول. |
smtpexplorer | SMTP (25/587) | اللافتة، و STARTTLS، وآليات AUTH، وتعداد المستخدمين VRFY، واختبار المرحّل المفتوح. |
dbprobe | قواعد البيانات | يفحص Redis/MySQL/PostgreSQL/MongoDB/Elasticsearch/CouchDB للوصول غير الموثق والإصدار. |