
مفاجئ ويب سريع مكتوب بلغة Go

مُخمّن ويب سريع مكتوب بلغة Go.
حمّل نسخة مصمّمة مسبقاً من صفحة الإصدارات، فك الضغط وشغّل!
أو
إذا كنت على Windows مع Scoop، يمكن تثبيت ffuf بـ: scoop install ffuf
أو
إذا كنت على Windows مع Winget، يمكن تثبيت ffuf بـ: winget install ffuf.ffuf
أو
إذا كنت على macOS مع homebrew، يمكن تثبيت ffuf بـ: brew install ffuf
أو
إذا كان لديك مترجم Go حديث: go install github.com/ffuf/ffuf/v2@latest (نفس الأمر يعمل للتحديث)
أو
git clone https://github.com/ffuf/ffuf ; cd ffuf ; go get ; go build
git-<تاريخ>-<تجزئة> بدلاً من الوسم. البناء المحلي ليس إصداراً رسمياً حتى لو كنت على وسم، ومعلومات البناء المضمنة من Go تعطينا التجزئة ولكن ليس اسم الوسم — لذلك نعرض التجزئة الدقيقة التي بُني منها. النسخ الرسمية ذات الإصدارات هي الموجودة في صفحة الإصدارات.أمثلة الاستخدام أدناه تُظهر أبسط المهام التي يمكنك إنجازها باستخدام ffuf.
التوثيق الأكثر تفصيلاً الذي يغطي العديد من الميزات مع الكثير من الأمثلة متاح في ويكي ffuf على https://github.com/ffuf/ffuf/wiki
للحصول على توثيق أكثر شمولاً مع أمثلة واقعية ونصائح، تأكد من الاطلاع على الدليل الرائع: "كل ما تحتاج معرفته عن FFUF" بقلم Michael Skelton (@codingo).
يمكنك أيضاً التدرب على فحوصات ffuf ضد مضيف حي مع دروس وحالات استخدام مختلفة إما محلياً باستخدام حاوية docker https://github.com/adamtlangley/ffufme أو ضد النسخة المستضافة على http://ffuf.me التي أنشأها Adam Langley @adamtlangley.
باستخدام الكلمة المفتاحية FUZZ في نهاية URL (-u):
ffuf -w /path/to/wordlist -u https://target/FUZZ
بافتراض أن حجم استجابة المضيف الافتراضي هو 4242 بايت، يمكننا تصفية جميع الاستجابات بهذا الحجم (-fs 4242) أثناء تخمين الرأس Host -:
ffuf -w /path/to/vhost/wordlist -u https://target -H "Host: FUZZ" -fs 4242
تخمين اسم معامل GET مشابه جداً لاكتشاف الدليل، ويعمل بتعريف الكلمة المفتاحية FUZZ كجزء من URL. يفترض هذا أيضاً حجم استجابة 4242 بايت لاسم معامل GET غير صالح.
ffuf -w /path/to/paramnames.txt -u https://target/script.php?FUZZ=test_value -fs 4242
إذا كان اسم المعامل معروفاً، يمكن تخمين القيم بنفس الطريقة. يفترض هذا المثال أن قيمة المعامل الخاطئة تعيد رمز استجابة HTTP 401.
ffuf -w /path/to/values.txt -u https://target/script.php?valid_name=FUZZ -fc 401
هذه عملية مباشرة للغاية، باستخدام الكلمة المفتاحية FUZZ مرة أخرى. هذا المثال يخمّن جزءاً فقط من طلب POST. نقوم مرة أخرى بتصفية استجابات 401.
ffuf -w /path/to/postdata.txt -X POST -d "username=admin\&password=FUZZ" -u https://target/login.php -fc 401
إذا كنت لا تريد أن يعمل ffuf إلى أجل غير مسمى، يمكنك استخدام -maxtime. هذا يوقف العملية بأكملها بعد وقت معين (بالثواني).
ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime 60
عند العمل مع التكرار، يمكنك التحكم في maxtime لكل مهمة باستخدام -maxtime-job. هذا يوقف المهمة الحالية بعد وقت معين (بالثواني) ويستمر مع التالية. يتم إنشاء مهام جديدة عندما تكتشف وظيفة التكرار دليلاً فرعياً.
ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime-job 60 -recursion -recursion-depth 2
من الممكن أيضاً الجمع بين العلمين للحد من أقصى وقت تنفيذ لكل مهمة وكذلك وقت التنفيذ الكلي. إذا كنت لا تستخدم التكرار، فإن كلا العلمين يتصرفان بنفس الطريقة.
في هذا المثال، سنخمّن بيانات JSON التي تُرسل عبر POST. يستخدم Radamsa كمعدّل.
عند استخدام --input-cmd، سيعرض ffuf التطابقات كموضعها. ستكون قيمة هذا الموضع متاحة للمستدعى كمتغير بيئة $FFUF_NUM. سنستخدم قيمة الموضع هذه كبذرة للمعدّل. الملفان example1.txt و example2.txt يحتويان على حمولات JSON صالحة. نطابق جميع الاستجابات، ولكن نفلتر رمز الاستجابة 400 - طلب سيئ:
ffuf --input-cmd 'radamsa --seed $FFUF_NUM example1.txt example2.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/FUZZ -mc all -fc 400
بالطبع ليس من الفعال استدعاء المعدّل لكل حمولة، لذلك يمكننا أيضاً توليد الحمولات مسبقاً، مع الاستمرار في استخدام Radamsa كمثال:
# توليد 1000 حمولة نموذجية
radamsa -n 1000 -o %n.txt example1.txt example2.txt
# ينتج عن ذلك ملفات 1.txt ... 1000.txt
# الآن يمكننا قراءة بيانات الحمولة في حلقة من ملف لـ ffuf
ffuf --input-cmd 'cat $FFUF_NUM.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/ -mc all -fc 400
عند تشغيل ffuf، يتحقق أولاً مما إذا كان ملف إعدادات افتراضي موجوداً. المسار الافتراضي لملف ffufrc هو
$XDG_CONFIG_HOME/ffuf/ffufrc. يمكنك إعداد خيار واحد أو أكثر في هذا الملف، وسيتم تطبيقها على
كل مهمة ffuf لاحقة. مثال على ملف ffufrc يمكن العثور عليه
هنا.
وصف أكثر تفصيلاً عن مواقع ملفات الإعدادات موجود في الويكي: https://github.com/ffuf/ffuf/wiki/Configuration
خيارات الإعداد المقدمة من سطر الأوامر تتجاوز تلك المحملة من ملف ffufrc الافتراضي.
ملاحظة: لا ينطبق هذا على أعلام CLI التي يمكن توفيرها أكثر من مرة. أحد هذه الأمثلة هو العلم -H (الرأس).
في هذه الحالة، سيتم إلحاق قيم -H المقدمة في سطر الأوامر بتلك الموجودة في ملف الإعداد بدلاً من ذلك.
بالإضافة إلى ذلك، في حالة رغبتك في استخدام مجموعة من ملفات الإعدادات لحالات استخدام مختلفة، يمكنك القيام بذلك عن طريق
تعريف مسار ملف الإعداد باستخدام علم سطر الأوامر -config الذي يأخذ مسار ملف الإعداد كمعامل له.
لتحديد حالة الاختبار لـ ffuf، استخدم الكلمة المفتاحية FUZZ في أي مكان في URL (-u)، أو الرؤوس (-H)، أو بيانات POST (-d).
Fuzz Faster U Fool - v2.1.0
خيارات HTTP:
-H رأس `"Name: Value"`، مفصول بنقطتين. يتم قبول عدة أعلام -H.
-X طريقة HTTP للاستخدام
-b بيانات الكوكي `"NAME1=VALUE1; NAME2=VALUE2"` لوظيفة "نسخ كـ curl".
-cc شهادة العميل للمصادقة. يجب تعريف مفتاح العميل أيضاً لكي يعمل هذا
-ck مفتاح العميل للمصادقة. يجب تعريف شهادة العميل أيضاً لكي يعمل هذا
-d بيانات POST
-http2 استخدام بروتوكول HTTP2 (الافتراضي: false)
-ignore-body لا تجلب محتوى الاستجابة. (الافتراضي: false)
-r اتباع إعادة التوجيه (الافتراضي: false)
-raw لا ترميز URI (الافتراضي: false)
-recursion المسح بشكل متكرر. يتم دعم الكلمة المفتاحية FUZZ فقط، ويجب أن ينتهي URL (-u) بها. (الافتراضي: false)
-recursion-depth أقصى عمق للتكرار. (الافتراضي: 0)
-recursion-strategy استراتيجية التكرار: "default" لاستراتيجية قائمة على إعادة التوجيه، و "greedy" للتكرار على جميع التطابقات (الافتراضي: default)
-replay-proxy إعادة تشغيل الطلبات المتطابقة باستخدام هذا الوكيل.
-sni هدف TLS SNI، لا يدعم الكلمة المفتاحية FUZZ
-timeout مهلة طلب HTTP بالثواني. (الافتراضي: 10)
-u عنوان URL الهدف
-x عنوان URL للوكيل (SOCKS5 أو HTTP). مثال: http://127.0.0.1:8080 أو socks5://127.0.0.1:8080
خيارات عامة:
-V إظهار معلومات الإصدار. (الافتراضي: false)
-ac معايرة خيارات التصفية تلقائياً (الافتراضي: false)
-acc سلسلة معايرة تلقائية مخصصة. يمكن استخدامها عدة مرات. تستلزم -ac
-ach معايرة تلقائية لكل مضيف (الافتراضي: false)
-ack كلمة مفتاحية للمعايرة التلقائية (الافتراضي: FUZZ)
-acs استراتيجيات معايرة تلقائية مخصصة. يمكن استخدامها عدة مرات. تستلزم -ac
-c تلوين المخرجات. (الافتراضي: false)
-config تحميل الإعدادات من ملف
-json مخرجات JSON، تطبع سجلات JSON مفصولة بأسطر جديدة (الافتراضي: false)
-maxtime أقصى وقت تشغيل بالثواني للعملية بأكملها. (الافتراضي: 0)
-maxtime-job أقصى وقت تشغيل بالثواني لكل مهمة. (الافتراضي: 0)
-noninteractive تعطيل وظيفة وحدة التحكم التفاعلية (الافتراضي: false)
-p ثوانٍ من `التأخير` بين الطلبات، أو نطاق تأخير عشوائي. مثال "0.1" أو "0.1-2.0"
-rate معدل الطلبات في الثانية (الافتراضي: 0)
-s لا تطبع معلومات إضافية (الوضع الصامت) (الافتراضي: false)
-sa التوقف عند جميع حالات الخطأ. يستلزم -sf و -se. (الافتراضي: false)
-scraperfile مسار ملف الكاشط المخصص
-scrapers مجموعات الكاشط النشطة (الافتراضي: all)
-se التوقف عند الأخطاء الزائفة (الافتراضي: false)
-search البحث عن حمولة FFUFHASH من سجل ffuf
-sf التوقف عندما > 95% من الاستجابات تعيد 403 ممنوع (الافتراضي: false)
-t عدد الخيوط المتزامنة. (الافتراضي: 40)
-v مخرجات مفصلة، تطبع URL الكامل وموقع إعادة التوجيه (إن وجد) مع النتائج. (الافتراضي: false)
خيارات المطابقة:
-mc مطابقة رموز حالة HTTP، أو "all" لكل شيء. (الافتراضي: 200-299,301,302,307,401,403,405,500)
-ml مطابقة عدد الأسطر في الاستجابة
-mmode عامل ضبط مجموعة المطابقة. إما: and، or (الافتراضي: or)
-mr مطابقة تعبير عادي
-ms مطابقة حجم استجابة HTTP
-mt مطابقة عدد الميلي ثانية لأول بايت استجابة، إما أكبر أو أقل. مثال: >100 أو <100
-mw مطابقة عدد الكلمات في الاستجابة
خيارات التصفية:
-fc تصفية رموز حالة HTTP من الاستجابة. قائمة مفصولة بفواصل للرموز والنطاقات
-fl تصفية بعدد الأسطر في الاستجابة. قائمة مفصولة بفواصل لعدد الأسطر والنطاقات
-fmode عامل ضبط مجموعة التصفية. إما: and، or (الافتراضي: or)
-fr تصفية تعبير عادي
-fs تصفية حجم استجابة HTTP. قائمة مفصولة بفواصل للأحجام والنطاقات
-ft تصفية بعدد الميلي ثانية لأول بايت استجابة، إما أكبر أو أقل. مثال: >100 أو <100
-fw تصفية بعدد الكلمات في الاستجابة. قائمة مفصولة بفواصل لعدد الكلمات والنطاقات
خيارات الإدخال:
-D وضع التوافق مع قائمة كلمات DirSearch. يُستخدم مع العلم -e. (الافتراضي: false)
-e قائمة مفصولة بفواصل من الامتدادات. يوسع الكلمة المفتاحية FUZZ.
-enc مشفرات للكلمات المفتاحية، مثل: 'FUZZ:urlencode b64encode'
-ic تجاهل تعليقات قائمة الكلمات (الافتراضي: false)
-input-cmd أمر ينتج الإدخال. --input-num مطلوب عند استخدام طريقة الإدخال هذه. يتجاوز -w.
-input-num عدد الإدخالات لاختبارها. يُستخدم مع --input-cmd. (الافتراضي: 100)
-input-shell الصدفة المستخدمة لتشغيل الأمر
-mode وضع تشغيل متعدد قوائم الكلمات. الأوضاع المتاحة: clusterbomb, pitchfork, sniper (الافتراضي: clusterbomb)
-request ملف يحتوي على طلب http الخام
-request-proto البروتوكول المستخدم مع الطلب الخام (الافتراضي: https)
-w مسار ملف قائمة الكلمات و(اختيارياً) كلمة مفتاحية مفصولة بنقطتين. مثال: '/path/to/wordlist:KEYWORD'
خيارات المخرجات:
-debug-log كتابة جميع السجلات الداخلية إلى الملف المحدد.
-o كتابة المخرجات إلى ملف
-od مسار الدليل لتخزين النتائج المتطابقة فيه.
-of تنسيق ملف المخرجات. التنسيقات المتاحة: json, ejson, html, md, csv, ecsv (أو 'all' لجميع التنسيقات) (الافتراضي: json)
-or لا تنشئ ملف المخرجات إذا لم تكن هناك نتائج (الافتراضي: false)
أمثلة الاستخدام:
تخمين مسارات الملفات من wordlist.txt، طابق جميع الاستجابات ولكن صف تلك التي حجم محتواها 42.
مخرجات ملونة ومفصلة.
ffuf -w wordlist.txt -u https://example.org/FUZZ -mc all -fs 42 -c -v
تخمين رأس Host، طابق استجابات HTTP 200.
ffuf -w hosts.txt -u https://example.org/ -H "Host: FUZZ" -mc 200
تخمين بيانات POST بصيغة JSON. طابق جميع الاستجابات التي لا تحتوي على النص "error".
ffuf -w entries.txt -u https://example.org/ -X POST -H "Content-Type: application/json" \
-d '{"name": "FUZZ", "anotherkey": "anothervalue"}' -fr "error"
تخمين مواقع متعددة. طابق فقط الاستجابات التي تعكس قيمة الكلمة المفتاحية "VAL". ملوّن.
ffuf -w params.txt:PARAM -w values.txt:VAL -u https://example.org/?PARAM=VAL -mr "VAL" -c
مزيد من المعلومات والأمثلة: https://github.com/ffuf/ffuf
بالضغط على ENTER أثناء تنفيذ ffuf، يتم إيقاف العملية ويتم إسقاط المستخدم إلى وضع تفاعلي يشبه الصدفة:
دخول الوضع التفاعلي
اكتب "help" للحصول على قائمة بالأوامر، أو ENTER للاستئناف.
> help
الأوامر المتاحة:
afc [قيمة] - إلحاق بفلتر رمز الحالة
fc [قيمة] - (إعادة) تكوين فلتر رمز الحالة
afl [قيمة] - إلحاق بفلتر عدد الأسطر
fl [قيمة] - (إعادة) تكوين فلتر عدد الأسطر
afw [قيمة] - إلحاق بفلتر عدد الكلمات
fw [قيمة] - (إعادة) تكوين فلتر عدد الكلمات
afs [قيمة] - إلحاق بفلتر الحجم
fs [قيمة] - (إعادة) تكوين فلتر الحجم
aft [قيمة] - إلحاق بفلتر الوقت
ft [قيمة] - (إعادة) تكوين فلتر الوقت
rate [قيمة] - ضبط معدل الطلبات في الثانية (النشط: 0)
queueshow - عرض قائمة انتظار المهام
queuedel [رقم] - حذف مهمة في قائمة الانتظار
queueskip - التقدم إلى المهمة التالية في قائمة الانتظار
restart - إعادة تشغيل واستئناف مهمة ffuf الحالية
resume - استئناف مهمة ffuf الحالية (أو: ENTER)
show - عرض نتائج المهمة الحالية
savejson [اسم الملف] - حفظ التطابقات الحالية في ملف
help - أنت تنظر إليه الآن
>
في هذا الوضع، يمكن إعادة تكوين عوامل التصفية، وإدارة قائمة الانتظار، وحفظ الحالة الحالية على القرص.
عند (إعادة) تكوين عوامل التصفية، يتم تطبيقها بأثر رجعي ويتم حذف جميع التطابقات الإيجابية الكاذبة من الذاكرة التي كانت ستصفى بواسطة عوامل التصفية المضافة حديثاً.
يمكن طباعة الحالة الجديدة للتطابقات باستخدام الأمر show الذي سيطبع جميع التطابقات كما لو
كانت قد تم العثور عليها بواسطة ffuf.
نظراً لأن التطابقات "السلبية" لا تُخزن في الذاكرة، فإن تخفيف عوامل التصفية لا يمكن للأسف استعادة التطابقات المفقودة.
في هذا السيناريو، يمكن للمستخدم استخدام الأمر restart، الذي يعيد تعيين الحالة ويبدأ المهمة الحالية من البداية.
نرحب بتقارير الأخطاء وطلبات الميزات وطلبات السحب. راجع CONTRIBUTING.md للبدء، و قسم المساهمة في الويكي للحصول على وثائق العمارة والاختبار.
ffuf مُصدَر تحت رخصة MIT. انظر LICENSE.