معلومات الأداة

الخاصيةالتفاصيل
الاسمWfuzz
الاستخدامتنفيذ عمليات Fuzzing على تطبيقات الويب (مسارات، معاملات، Headers، Cookies)
المنصاتLinux، Windows، macOS
النوعأداة مفتوحة المصدر

ما هي أداة Wfuzz، وفي أي المجالات تُستخدم؟

تُعد Wfuzz أداة مفتوحة المصدر مخصصة لتنفيذ عمليات Fuzzing على تطبيقات الويب، وتقوم فكرتها الأساسية على إرسال كميات كبيرة من القيم المرشّحة (المستمدة من قائمة كلمات) إلى أي جزء من طلب HTTP، ثم مراقبة استجابة السيرفر لكل قيمة. تتميز الأداة بمرونة عالية، إذ لا تقتصر على فحص المسارات في الرابط فحسب، بل يمكن استهداف أي عنصر آخر ضمن الطلب — كالترويسات (Headers)، بيانات POST، أو ملفات تعريف الارتباط (Cookies) — من خلال وضع الكلمة المفتاحية FUZZ في الموضع المطلوب فحصه.

فيما يلي أبرز الاستخدامات العملية للأداة:

  • اكتشاف المسارات والملفات (Directory and File Discovery): يتم تطبيق قائمة كلمات على مسارات السيرفر، بحيث يُرجع كل مسار موجود فعلياً كود استجابة مختلفاً عن المسارات غير الموجودة، مما يتيح اكتشاف صفحات وموارد مخفية لم تكن ظاهرة من واجهة الموقع.

  • فحص المعاملات (Parameter Fuzzing): تتيح الأداة فحص معاملات GET وPOST بحثاً عن ثغرات من قبيل SQL Injection وCommand Injection، أو أي إشكاليات متعلقة بالتحقق من صحة المدخلات، مع دعم تركيبات معقدة من المعاملات وأنظمة الترميز المختلفة (Encoding).

  • اختبار المصادقة (Authentication Testing): يمكن استخدام الأداة لتنفيذ هجمات القوة الغاشمة (Brute Force) على HTTP Basic Auth، أو نماذج تسجيل الدخول (Form-based)، أو أي آلية مصادقة مخصصة أخرى، بهدف الكشف عن بيانات اعتماد ضعيفة.

  • اكتشاف Virtual Hosts: من خلال تطبيق Fuzzing على ترويسة الـ Host، يمكن الكشف عن مواقع أو تطبيقات إضافية مستضافة على السيرفر ذاته دون أن تكون ظاهرة بشكل مباشر.

  • Fuzzing مخصص لأي جزء من الطلب: تدعم الأداة تطبيق Fuzzing على أي ترويسة أو Cookie أو حقل مخصص ضمن طلب HTTP، مما يوفر تغطية اختبارية شاملة.

  • الفلترة والتحليل المتقدم: توفر الأداة إمكانيات فلترة متقدمة اعتماداً على كود الاستجابة، طول المحتوى، عدد الكلمات، أو أنماط Regex، مما يساعد على استخلاص النتائج ذات الدلالة من كمّ كبير من عمليات الفحص.

الميزات الأساسية

  • دعم أكثر من نقطة Fuzzing في آن واحد
  • Fuzzing قائم على قوائم الكلمات (Wordlists)
  • دعم Payload Iterators والتركيبات المتعددة
  • دعم مختلف طرق HTTP
  • Fuzzing مخصص للترويسات (Headers)
  • Fuzzing ملفات تعريف الارتباط (Cookies)
  • Fuzzing بيانات POST
  • دعم المصادقة
  • دعم البروكسي (Proxy)
  • خيارات فلترة متقدمة
  • تحليل الاستجابات
  • صيغ إخراج متعددة (JSON، HTML، CSV)
  • المقارنة بخط أساس (Baseline Comparison)
  • دعم الفحص التكراري (Recursion)
  • دعم تعدد الخيوط (Multi-Threading)

مصادر البيانات

  • قوائم الكلمات (Wordlists)
  • روابط الهدف
  • استجابات HTTP
  • أكواد الحالة (Status Codes)
  • محتوى الاستجابة
  • ترويسات الاستجابة (Response Headers)
  • طول الاستجابة
  • Payloads مخصصة
  • أنظمة الترميز (Encoding Schemes)

التثبيت

تتوفر الأداة افتراضياً في معظم توزيعات اختبار الاختراق، مثل Kali Linux. في حال عدم توفرها، يمكن تثبيتها كما يلي:

pip install wfuzz

أو عبر مدير الحزم مباشرة:

sudo apt install wfuzz

أوامر Wfuzz الشائعة

1. Fuzzing أساسي للمسارات

لماذا نستخدم هذا الأمر: تُعد هذه الخطوة الأولى التي تُطبَّق عادةً على أي هدف، إذ يتم تطبيق قائمة كلمات مكان الكلمة FUZZ في الرابط، ويُرجع كل مسار موجود فعلياً على السيرفر كود استجابة مختلفاً عن المسارات غير الموجودة، مما يتيح اكتشاف مجلدات وملفات لم تكن ظاهرة من واجهة الموقع.

wfuzz -w <wordlist> http://target.com/FUZZ

2. Fuzzing أكثر من نقطة في آن واحد

لماذا نستخدم هذا الأمر: في بعض الحالات يكون من الضروري فحص أكثر من متغير ضمن الطلب ذاته، كفحص المسار وامتداد الملف معاً. في هذه الحالة تُستخدم الكلمتان FUZZ وFUZ2Z، وتُخصَّص لكل منهما قائمة كلمات مستقلة.

wfuzz -w <wordlist1> -w <wordlist2> http://target.com/FUZZ/FUZ2Z

3. Fuzzing بيانات POST

لماذا نستخدم هذا الأمر: عند الحاجة إلى فحص نموذج تسجيل دخول أو نقطة API تستقبل بيانات POST، يتم وضع الكلمة FUZZ مكان القيمة المراد اختبارها (مثل كلمة المرور)، بدلاً من إدخالها يدوياً في كل محاولة.

wfuzz -w <wordlist> -d "username=admin&password=FUZZ" http://target.com/login

4. Fuzzing الترويسات (Headers)

لماذا نستخدم هذا الأمر: تظهر بعض الثغرات فقط عند التلاعب بقيمة ترويسة معينة، مثل User-Agent. يتيح هذا الأمر اختبار قيم مختلفة على أي ترويسة يتم تحديدها.

wfuzz -w <wordlist> -H "User-Agent: FUZZ" http://target.com/

5. Fuzzing ملفات تعريف الارتباط (Cookies)

لماذا نستخدم هذا الأمر: يُستخدم لفحص آليات إدارة الجلسات (Session Management) أو أي مصادقة تعتمد على Cookie، إذ توضع الكلمة FUZZ مكان قيمة الكوكي، ويُلاحَظ تعامل السيرفر مع القيم المختلفة.

wfuzz -w <wordlist> -b "session=FUZZ" http://target.com/

6. اكتشاف Virtual Hosts

لماذا نستخدم هذا الأمر: قد يستضيف سيرفر واحد أكثر من موقع أو تطبيق على العنوان ذاته (IP)، ويتم التمييز بينها من خلال ترويسة الـ Host. يقوم هذا الأمر بتجربة أسماء مختلفة على هذه الترويسة، مما يتيح اكتشاف مواقع إضافية غير ظاهرة.

wfuzz -w <wordlist> -H "Host: FUZZ.target.com" http://target_ip/

7. الفلترة حسب كود الحالة

لماذا نستخدم هذا الأمر: بعد إجراء عملية Fuzzing واسعة، ينتج عادةً عدد كبير من النتائج. يتيح هذا الخيار التركيز على أكواد استجابة محددة (مثل 200 أو أكواد إعادة التوجيه)، بدلاً من مراجعة جميع النتائج يدوياً.

wfuzz -w <wordlist> --sc 200,301,302 http://target.com/FUZZ

8. إخفاء أكواد حالة معينة

لماذا نستخدم هذا الأمر: على عكس الخيار السابق، يتيح هذا الأمر تحديد الأكواد المراد إخفاؤها (مثل 404 و403)، بهدف تصفية صفحات الخطأ الشائعة والإبقاء على النتائج ذات الصلة فقط.

wfuzz -w <wordlist> --hc 404,403 http://target.com/FUZZ

9. الفلترة حسب طول الاستجابة

لماذا نستخدم هذا الأمر: في بعض الحالات يُرجع السيرفر كود استجابة 200 حتى للصفحات غير الموجودة، مما يستدعي الفلترة بحسب طول المحتوى للتمييز بين الصفحات الحقيقية وصفحة خطأ موحدة الشكل.

wfuzz -w <wordlist> --sl 1000 http://target.com/FUZZ

10. الإخفاء حسب طول الاستجابة

لماذا نستخدم هذا الأمر: عند معرفة طول صفحة الخطأ الافتراضية مسبقاً (على سبيل المثال، جميع الصفحات غير الموجودة تُرجع محتوى طوله 4242 حرفاً)، يمكن إخفاؤها جميعاً بأمر واحد، والإبقاء على النتائج المختلفة فقط.

wfuzz -w <wordlist> --hl 4242 http://target.com/FUZZ

11. الفلترة حسب عدد الكلمات

لماذا نستخدم هذا الأمر: يمثل هذا الخيار طريقة بديلة للتمييز بين الاستجابات، بالاعتماد على عدد الكلمات بدلاً من طول المحتوى بالأحرف، وهو مفيد عندما يكون طول المحتوى متقارباً بينما يختلف عدد الكلمات فعلياً.

wfuzz -w <wordlist> --sw 100 http://target.com/FUZZ

12. الفلترة باستخدام Regex

لماذا نستخدم هذا الأمر: يُستخدم عند الحاجة إلى البحث عن نمط نصي محدد ضمن محتوى الاستجابة، مثل عبارة “admin panel”، بدلاً من فحص كل استجابة يدوياً.

wfuzz -w <wordlist> --ss "admin panel" http://target.com/FUZZ

13. المصادقة الأساسية (Basic Authentication)

لماذا نستخدم هذا الأمر: عندما يكون الموقع محمياً بواسطة HTTP Basic Auth، يتيح هذا الأمر تجربة كلمات مرور مختلفة على اسم مستخدم معروف (مثل admin)، بهدف الكشف عن كلمات مرور ضعيفة.

wfuzz -w <wordlist> --basic admin:FUZZ http://target.com/

14. تحديد طريقة HTTP مخصصة

لماذا نستخدم هذا الأمر: لا يقتصر الفحص على طريقتي GET وPOST القياسيتين فقط؛ إذ قد يستدعي الأمر اختبار طرق أخرى مثل PUT أو DELETE، لمعرفة كيفية تعامل التطبيق معها.

wfuzz -w <wordlist> -X POST http://target.com/FUZZ

15. دعم البروكسي

لماذا نستخدم هذا الأمر: يتيح توجيه جميع الطلبات عبر بروكسي محدد (مثل Burp Suite)، بغرض تحليل الترافيك بالتفصيل أو تجاوز قيود شبكة معينة.

wfuzz -w <wordlist> -p 127.0.0.1:8080 http://target.com/FUZZ

16. التأخير بين الطلبات

لماذا نستخدم هذا الأمر: قد يؤدي إرسال آلاف الطلبات بسرعة عالية إلى إرهاق السيرفر أو تفعيل آليات تحديد المعدل (Rate Limiting). يضيف هذا الخيار فاصلاً زمنياً بين كل طلب وآخر، بهدف تخفيف الحمل الناتج عن الفحص.

wfuzz -w <wordlist> -s 2 http://target.com/FUZZ

17. وضع الفحص التكراري (Recursion)

لماذا نستخدم هذا الأمر: عند اكتشاف مجلد جديد أثناء الفحص، يتيح هذا الخيار فحص محتوياته تلقائياً، دون الحاجة إلى إعادة تشغيل الأمر يدوياً على كل مجلد جديد يتم اكتشافه.

wfuzz -w <wordlist> -R 2 http://target.com/FUZZ

18. طلب أساسي للمقارنة (Baseline Request)

لماذا نستخدم هذا الأمر: يتم إنشاء طلب مرجعي (Baseline) تُقارَن به بقية النتائج، بحيث تُفلتَر تلقائياً أي استجابة مشابهة لهذا المرجع، ويتم التركيز فقط على النتائج المختلفة فعلياً.

wfuzz -w <wordlist> -z file,wordlist.txt --filter "c=200" http://target.com/FUZZ

19. متابعة عمليات إعادة التوجيه

لماذا نستخدم هذا الأمر: قد تُرجع بعض المسارات استجابة إعادة توجيه (Redirect) بدلاً من المحتوى مباشرة. يتيح هذا الخيار متابعة سلسلة إعادة التوجيه حتى الوصول إلى الوجهة النهائية الفعلية.

wfuzz -w <wordlist> --follow http://target.com/FUZZ

20. ضبط عدد الخيوط (Threads)

لماذا نستخدم هذا الأمر: يتحكم هذا الخيار بعدد الطلبات المتزامنة؛ فزيادة العدد تسرّع الفحص لكنها ترفع الحمل على السيرفر والشبكة، بينما يؤدي تخفيضه إلى فحص أهدأ وأبطأ.

wfuzz -w <wordlist> -t 50 http://target.com/FUZZ

21. حفظ النتائج في ملف

لماذا نستخدم هذا الأمر: عند إجراء فحص واسع النطاق، يصبح من الضروري حفظ النتائج في ملف للرجوع إليها لاحقاً أو إدراجها ضمن تقرير، بدلاً من الاكتفاء بعرضها في الطرفية (Terminal).

wfuzz -w <wordlist> -f output.txt http://target.com/FUZZ

22. الإخراج بصيغة JSON

لماذا نستخدم هذا الأمر: عند الحاجة إلى دمج نتائج Wfuzz مع أداة أخرى أو سكربت آلي، تتيح صيغة JSON معالجة النتائج برمجياً بسهولة، بدلاً من تحليل نص عادي.

wfuzz -w <wordlist> -o json http://target.com/FUZZ

23. المساعدة ومعلومات الاستخدام

لماذا نستخدم هذا الأمر: يُستخدم لعرض جميع الخيارات المتاحة وصيغة كتابة الأوامر، خاصة عند نسيان خيار معين أو الحاجة إلى التأكد من الصيغة الصحيحة لأمر ما.

wfuzz -h

صيغة استخدام بديلة:

wfuzz --help

ملاحظات OPSEC

أدوات الحماية التي قد تكشف النشاط:

  • جدار حماية تطبيقات الويب (WAF): تمتلك معظم المواقع الجدية جدار حماية يراقب حجم الطلبات ونمطها؛ وإرسال آلاف الطلبات المتتالية على الرابط ذاته بأسماء مختلفة يُعد نمطاً كلاسيكياً يكتشفه أي WAF أساسي.
  • أنظمة Rate Limiting: تحدد كثير من السيرفرات عدد الطلبات المسموح بها في الثانية من العنوان ذاته (IP)، وتقوم بحظر أو إبطاء أي طلبات تتجاوز هذا الحد، مما قد يؤدي إلى توقف الأداة عن العمل أو استغراقها وقتاً أطول بكثير من المتوقع.
  • سجلات السيرفر (Access Logs): يُسجَّل كل طلب يصل إلى السيرفر في سجل الوصول، وأي مراجعة لاحقة لهذه السجلات ستُظهر آلاف الطلبات المتتالية بالنمط ذاته (استبدال الكلمة FUZZ) من العنوان ذاته خلال فترة زمنية قصيرة جداً.
  • أنظمة SIEM والمراقبة المركزية: في البيئات المؤسسية، يظهر الحجم الكبير المفاجئ من الطلبات القادمة من مصدر واحد كتنبيه فوري في أنظمة المراقبة المركزية، حتى وإن لم يقم جدار الحماية نفسه بإيقاف الطلبات.
  • آليات قفل الحسابات (Account Lockout): في حال تنفيذ هجوم قوة غاشمة على تسجيل الدخول أو Basic Auth، قد تؤدي محاولات الدخول الفاشلة المتكررة إلى قفل الحساب أو إطلاق تنبيه أمني للمستخدم الحقيقي.

مستوى الضجيج لكل تقنية:

التقنيةمستوى الضجيجالسبب
Fuzzing أساسي للمسارات (قائمة كبيرة)مرتفعآلاف الطلبات المتتالية على السيرفر ذاته خلال فترة قصيرة، وهو نمط واضح تكتشفه معظم أنظمة WAF وRate Limiting
Fuzzing المعاملات (GET/POST)متوسط إلى مرتفعيعتمد على حجم قائمة الكلمات المستخدمة، لكنه يبقى عدداً كبيراً نسبياً من الطلبات على نقطة واحدة محددة
هجوم القوة الغاشمة على تسجيل الدخول / Basic Authمرتفع جداًتؤدي محاولات الدخول الفاشلة المتكررة إلى قفل الحساب أو تنبيه أمني فوري، وهو من أكثر الأنماط عرضة للرصد
Fuzzing الترويسات/Cookiesمتوسطعدد طلبات أقل نسبياً من الفحص الشامل للمسارات، لكنه يبقى ملحوظاً إذا كانت القائمة كبيرة
اكتشاف Virtual Hostsمنخفض نسبياًعدد الطلبات محدود مقارنة بفحص شامل للمسارات، إذ يستهدف عادةً نقطة واحدة بقيم مختلفة لترويسة الـ Host
وضع الفحص التكراري (Recursion)مرتفع جداًيضاعف كل مجلد مكتشف عدد الطلبات، مما يؤدي إلى تصاعد حجم الترافيك الكلي بسرعة كبيرة
استخدام تأخير بين الطلبات (-s)يقلل الضجيجيكسر الفاصل الزمني النمط السريع المتلاحق الذي تعتمد عليه أنظمة الرصد
رفع عدد الخيوط (-t) إلى قيمة عاليةيزيد الضجيجيرفع العدد الأكبر من الطلبات المتزامنة خلال فترة أقصر احتمالية تفعيل Rate Limiting أو لفت انتباه أنظمة المراقبة

كيف نقلل الأثر:

  • تفضيل قوائم كلمات مركّزة وصغيرة، حيثما أمكن، بدلاً من قوائم ضخمة عامة، بهدف تقليل عدد الطلبات الإجمالي.
  • استخدام الخيار -s لإضافة فاصل زمني بين الطلبات بدلاً من الاعتماد على أقصى سرعة ممكنة، خاصة في مرحلة الاستطلاع الأولي.
  • تخفيض عدد الخيوط (-t) بدلاً من رفعه إلى الحد الأقصى، إذا كان الهدف تقليل الأثر على أنظمة المراقبة.
  • تجنب تفعيل هجوم القوة الغاشمة على تسجيل الدخول أو Basic Auth دون داعٍ واضح، نظراً لكونها من أكثر التقنيات المؤدية إلى تنبيهات فورية.
  • استخدام خيارات الفلترة (--hc, --sc, --hl) لتقليل عدد الطلبات المكررة أو غير الضرورية، بدلاً من تنفيذ فحص شامل غير مركّز.

أدوات

  • wfuzz — الأداة الأساسية لتنفيذ عمليات Fuzzing على تطبيقات الويب
  • خيارات الفلترة المدمجة (--sc, --hc, --sl, --hl, --sw, --ss) — لتحليل النتائج وتضييق نطاقها
  • خيارات التحكم بالضجيج والسرعة (-s, -t) — لضبط معدل الطلبات
  • -p — لتوجيه الطلبات عبر بروكسي مثل Burp Suite