
مجموعة اختبار الاختراق فائقة السرعة.
تثبيت · استخدام · الوحدات · وثائق · مساهمة
مسح سريع ومتزامن من الاستكشاف إلى الاستغلال في ملف ثنائي واحد. يشترك كل ماسح ضوئي في عميل HTTP واحد مجمع الاتصالات.
sif هو ماسح ضوئي للاستكشاف والاستغلال يقوم بتشغيل السلسلة الكاملة في ملف ثنائي واحد: تعداد النطاقات الفرعية، فحص المنافذ، الزاحف، nuclei، اكتشاف الأطر/CVE، استخراج الأسرار من JavaScript، فحوصات الثغرات على الويب (CORS/XSS/redirect)، فحص السحابة والاستيلاء. أكثر من 25 نوع مسح، أمر واحد.
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
تم تجميع nuclei و colly كمكتبات بدلاً من استدعائها كأوامر خارجية (لا يوجد exec.Command في الشجرة)، لذلك فهو ملف ثنائي ثابت واحد بدون تبعيات وقت التشغيل ولا حاجة لربط أي شيء.
يعمل كل ماسح ضوئي من خلال عميل HTTP واحد مشترك ومجموعة عمال لسرقة العمل. تطبق -proxy و -H و -cookie و -rate-limit على التشغيل بأكمله مرة واحدة، ويتم تجميع الاتصالات وإعادة استخدامها عبر المسح (تشغيل مضيف واحد يعيد استخدام اتصال واحد لحوالي 50 طلبًا بدلاً من الاتصال 50 مرة)، والمضيف البطيء لا يعطل الباقي. هذا العميل المشترك هو السبب العملي لاستخدامه بدلاً من ربط مجموعة من الأدوات المنفصلة معًا. فحص المنافذ مبني على connect()، لذا فإن rustscan و nmap لا يزالان أسرع في فحوصات المنافذ الخام.
يقرأ الأهداف من stdin ويطبع النتائج سطرًا واحدًا لكل نتيجة تحت -silent، لذا يمكن تركيبه:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diff يحول إعادة المسح إلى مراقب لا يُبلغ إلا عن التغييرات، -notify ينشر إلى Slack/Discord/Telegram/Webhook، ويتم التصدير إلى SARIF و Markdown.
brew tap vmfunc/sif
brew install sif
قم بالتثبيت باستخدام مساعد AUR المفضل لديك:
yay -S sif
# أو
paru -S sif
# nixpkgs (تصريحي: أضف إلى configuration.nix أو home-manager)
environment.systemPackages = [ pkgs.sif ];
# أو بشكل أمري
nix profile install nixpkgs#sif
# أو قم بتشغيله بدون تثبيت
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
يحتوي المستودع أيضًا على flake إذا كنت تريد البناء من المصدر:
nix run github:vmfunc/sif
curl -1sLf 'https://dl.cloudsmith.io/public/sif/deb/setup.deb.sh' | sudo -E bash
sudo apt-get install sif
احصل على أحدث ملف ثنائي من الإصدارات.
git clone https://github.com/vmfunc/sif.git
cd sif
make
يتطلب Go 1.25+
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# مسح أساسي
./sif -u https://example.com
# فحص الدلائل
./sif -u https://example.com -dirlist medium
# تعداد النطاقات الفرعية
./sif -u https://example.com -dnslist medium
# فحص المنافذ
./sif -u https://example.com -ports common
# اكتشاف إطار JavaScript + ضبط السحابة الخاطئ
./sif -u https://example.com -js -c3
# استخبارات مضيف Shodan (يتطلب متغير البيئة SHODAN_API_KEY)
./sif -u https://example.com -shodan
# اكتشاف نطاق SecurityTrails (يتطلب متغير البيئة SECURITYTRAILS_API_KEY)
# يكتشف النطاقات الفرعية + النطاقات المرتبطة، ثم يمسحها جميعًا
./sif -u https://example.com -securitytrails -headers
# استكشاف SQL + فحص LFI
./sif -u https://example.com -sql -lfi
# فحوصات ثغرات الويب (CORS، إعادة توجيه مفتوحة، XSS منعكسة)
./sif -u https://example.com -cors -redirect -xss
# اكتشاف الإطار (مع بحث CVE)
./sif -u https://example.com -framework
# مسح شامل
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
قم بتشغيل ./sif -h لجميع الخيارات.
بعض الأوامر الفرعية تعمل بدون مسح:
# طباعة الإصدار (إصدارات الإصدار مختومة؛ الإصدارات المحلية تستخدم git describe)
./sif version
# عرض أحدث ملاحظات الإصدار (أيضًا -pn)
./sif patchnote
في المرة الأولى التي تقوم فيها بتشغيل إصدار جديد، يطبع sif ملاحظات ذلك الإصدار مرة واحدة. قم بتعيين SIF_NO_PATCHNOTES=1 لإيقاف ذلك.
sif له بنية معيارية. يتم تعريف الوحدات في YAML ويمكن توسيعها من قبل المستخدمين.
تنطبق هذه على كل طلب خارج عبر جميع الماسحات الضوئية:
# مسح عبر وكيل socks5 مع رأس مخصص وملف تعريف ارتباط وحد 20 طلب/ثانية
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20
الماسح الضوئي الذي يحدد رأسًا بشكل صريح (مثل مفتاح API) يفوز دائمًا على الافتراضي العام.
اكتب نتائج التشغيل إلى ملف لـ CI/CD أو الفرز:
# مسح وإصدار كل من تقرير SARIF و Markdown
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
يمكن استيراد إخراج SARIF بواسطة فحص رمز GitHub؛ Markdown هو ملخص قابل للقراءة لكل هدف.
يحول -diff إعادة المسح إلى مراقب: يقوم sif بالتقاط النتائج الطبيعية لكل هدف إلى ملف JSON، وفي التشغيل التالي يُبلغ فقط عن الفرق (+ جديد / - ذهب) مقابل تلك اللقطة، ثم يعيد كتابتها. التشغيل الأول لهدف ليس له خط أساس، لذا كل شيء + جديد. توجد اللقطات في -store (ملف واحد معقم لكل هدف)؛ عند عدم التعيين، يعيد استخدام دليل السجل، وإلا يتراجع إلى <user-config>/sif/state.
# تشغيل خط الأساس، ثم إعادة المسح لاحقًا ورؤية فقط ما تغير
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
يتم دائمًا إعادة كتابة اللقطة، لذلك كل تشغيل يفرق مقابل السابق. الفرق هو chrome (يظهر في مخرج chrome العادي / stderr تحت -silent)، وليس تيار النتائج.
أرسل النتائج إلى حوض محادثة/Webhook بحيث يقوم تشغيل الاستطلاع المستمر بالتنبيه بشأن ما يكتشفه. كل مزود هو POST واحد عبر عميل HTTP المشترك، لذا ينطبق تكوين الوكيل/معدل الطلب/الرأس العالمي.
يتم تكوين المزودين أولاً من خلال البيئة؛ ملف YAML (-notify-config) يتجاوز كل حقل. تتطابق مفاتيح YAML مع projectdiscovery/notify بحيث يمكن نقل تكوين موجود:
# تنبيه Slack على النتائج ذات المستوى المتوسط+ التي تم اكتشافها أثناء المسح
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
./sif -u https://example.com -cors -xss -notify -notify-severity medium
المزود بدون وجهة يتم تخطيه؛ بدون أي تكوين، -notify هو no-op صامت. Slack/Discord/Telegram يستقبلون كتلة نتيجة بعرض ثابت؛ webhook العام يستقبل JSON مهيكل ({count, findings[]}).
يقرأ sif الأهداف من stdin ويقبل المضيفين العارية، لذلك يناسب خط أنابيب Unix. -silent يوجه كل chrome/banner/spinner/log إلى stderr ويطبع نتيجة عادية واحدة لكل سطر ([severity] target module title) إلى stdout:
# subfinder يغذي المضيفين، sif يفحصهم، notify ينقل النتائج
subfinder -d example.com | sif -silent -probe | notify
| العلم | الوصف |
|---|---|
| stdin | تدفق هدف موصول (مضيف واحد/URL واحد لكل سطر) يُقرأ إلى جانب -u/-f |
المضيفون بدون مخطط يفترض https://؛ يتم الاحتفاظ بـ http:///https:// الصريح؛ أي مخطط آخر (ftp://، ...) يتم رفضه.
سرد الوحدات المتاحة:
./sif -lm
تشغيل وحدات محددة:
# تشغيل بواسطة المعرف
./sif -u https://example.com -m sqli-error-based,xss-reflected
# تشغيل بواسطة العلامة
./sif -u https://example.com -mt owasp-top10
# تشغيل جميع الوحدات
./sif -u https://example.com -am
أنشئ وحداتك الخاصة في ~/.config/sif/modules/. تستخدم الوحدات تنسيق YAML مشابهًا لقوالب nuclei:
id: my-custom-check
info:
name: فحص أمان مخصص
author: أنت
severity: متوسط
description: يتحقق من شيء محدد
tags: [مخصص, استطلاع]
type: http
http:
method: GET
paths:
- "{{BaseURL}}/admin"
- "{{BaseURL}}/login"
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "لوحة الإدارة"
- "تسجيل الدخول"
condition: or
راجع docs/modules.md للحصول على تنسيق الوحدة الكامل.
نرحب بالمساهمات. راجع contributing.md للحصول على الإرشادات.
# تنسيق
gofmt -w .
# lint
go run github.com/golangci/golangci-lint/v2/cmd/[email protected] run
# اختبار
go test ./...
انضم إلى Discord الخاص بنا للحصول على الدعم ومناقشات الميزات ونصائح اختبار الاختراق:
| العلم | الوصف |
|---|
-dirlist | فحص الدلائل والملفات (صغير/متوسط/كبير) |
-mc | dirlist: طابق رموز الحالة هذه (قائمة مفصولة بفواصل، مثل 200,301) |
-fc | dirlist: قم بتصفية رموز الحالة هذه (قائمة مفصولة بفواصل) |
-fs | dirlist: قم بتصفية الاستجابات ذات أحجام الجسم هذه (قائمة مفصولة بفواصل) |
-fw | dirlist: قم بتصفية الاستجابات بعدد الكلمات هذا (قائمة مفصولة بفواصل) |
-fr | dirlist: قم بتصفية الاستجابات التي يتطابق جسمها مع هذا التعبير النمطي |
-ac | المعايرة التلقائية لخط الأساس للبدل 404 الناعم (dirlist, sql) |
-w | dirlist: قائمة كلمات مخصصة (ملف محلي أو URL؛ يتجاوز حجم -dirlist) |
-e | dirlist: الامتدادات المضافة إلى كل كلمة (قائمة مفصولة بفواصل، مثل php,bak,env) |
-dnslist | تعداد النطاقات الفرعية (صغير/متوسط/كبير) |
-ports | فحص المنافذ (شائع/كامل) |
-nuclei | فحص الثغرات باستخدام قوالب nuclei |
-dork | دوكينج جوجل تلقائي |
-js | تحليل JavaScript + استخراج الأسرار ونقاط النهاية |
-c3 | سوء تكوين التخزين السحابي |
-headers | تحليل رؤوس HTTP |
-sh | تحليل رؤوس الأمان (الرؤوس المفقودة/الضعيفة) |
-st | اكتشاف الاستيلاء على النطاق الفرعي |
-cms | اكتشاف نظام إدارة المحتوى |
-whois | استعلامات whois |
-git | اكتشاف مستودع git المكشوف |
-shodan | استعلام shodan (يتطلب SHODAN_API_KEY) |
-securitytrails | اكتشاف النطاق + توسيع الهدف (يتطلب SECURITYTRAILS_API_KEY) |
-sql | استكشاف SQL |
-lfi | تضمين ملف محلي |
-jwt | اكتشاف JWT + تحليل الضعف دون اتصال (alg:none, hmac ضعيف, exp, مطالب حساسة) |
-openapi | كشف تعرض مواصفات OpenAPI/Swagger (تعداد المسارات + نقاط نهاية غير مصادق عليها) |
-favicon | بصمة تجزئة favicon (mmh3 بنمط Shodan، مطابقة تقنية + استعلام محوري) |
-cors | كشف سوء تكوين CORS |
-redirect | كشف إعادة التوجيه المفتوحة |
-xss | كشف XSS المنعكس |
-framework | اكتشاف الإطار مع بحث CVE |
-crawl | زاحف الويب (عنكبوت روابط/نصوص/نماذج نفس المضيف) |
-crawl-depth | أقصى عمق للتكرار الزاحف (الافتراضي 2) |
-passive | اكتشاف سلبي للنطاقات الفرعية/عناوين URL (صفر حركة مرور نحو الهدف) |
-probe | كشف المضيف المباشر (الحالة، العنوان، الخادم، سلسلة إعادة التوجيه) |
| العلم | الوصف |
|---|
-proxy | توجيه كل حركة المرور عبر وكيل (URL http/https/socks5) |
-H, --header | رأس مخصص للإرسال (قابل للتكرار أو مفصول بفواصل، "Key: Value") |
-cookie | رأس ملف تعريف ارتباط للإرسال مع كل طلب |
-rate-limit | الحد الأقصى للطلبات في الثانية (0 = غير محدود، الافتراضي 0) |
| العلم | الوصف |
|---|
-sarif | كتابة تقرير SARIF 2.1.0 إلى هذا الملف |
-markdown, -md | كتابة تقرير Markdown إلى هذا الملف |
-silent | إخراج عادي: chrome إلى stderr، نتيجة واحدة لكل سطر إلى stdout (للأنابيب) |
-diff | إظهار النتائج المضافة/المحذوفة فقط منذ آخر لقطة لكل هدف |
-store | دليل اللقطات لـ -diff (الافتراضي: دليل السجل، وإلا <user-config>/sif/state) |
| العلم | الوصف |
|---|
-notify | أرسل النتائج إلى كل مزود تم تكوينه بعد المسح |
-notify-severity | الحد الأدنى من الخطورة للإرسال (info/low/medium/high/critical، الافتراضي medium) |
-notify-config | مسار إلى ملف تكوين YAML متوافق مع notify (يتجاوز متغيرات البيئة) |
| متغير البيئة | مفتاح YAML | المزود |
|---|
SLACK_WEBHOOK_URL | slack_webhook_url | Webhook داخلي لـ Slack |
DISCORD_WEBHOOK_URL | discord_webhook_url | Webhook لـ Discord |
TELEGRAM_BOT_TOKEN | telegram_api_key | API بوت تيليجرام (يحتاج أيضًا إلى معرف الدردشة) |
TELEGRAM_CHAT_ID | telegram_chat_id | دردشة تيليجرام الوجهة |
NOTIFY_WEBHOOK_URL | webhook_url | Webhook JSON عام (نتائج مهيكلة) |
![]() vmfunc 🚧 🧑🏫 📆 🛡️ 💻 | ![]() ProjectDiscovery 📦 | ![]() macdoos 💻 | ![]() Matthieu Witrowiez 🤔 | ![]() tessa 🚇 💬 📓 | ![]() Eva 📝 🖋 🔬 🛡️ ⚠️ 💻 | ![]() Zoa Hickenlooper 💻 |
![]() acxtrilla 📦 |