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

# ffuf - التخمين بشكل أسرع أيها الأحمق
مُخمّن ويب سريع مكتوب بلغة Go.
- [التثبيت](https://github.com/ffuf/ffuf#installation)
- [أمثلة الاستخدام](https://github.com/ffuf/ffuf#example-usage)
- [اكتشاف المحتوى](https://github.com/ffuf/ffuf#typical-directory-discovery)
- [اكتشاف المضيف الافتراضي](https://github.com/ffuf/ffuf#virtual-host-discovery-without-dns-records)
- [تخمين المعاملات](https://github.com/ffuf/ffuf#get-parameter-fuzzing)
- [تخمين بيانات POST](https://github.com/ffuf/ffuf#post-data-fuzzing)
- [استخدام معدّل خارجي](https://github.com/ffuf/ffuf#using-external-mutator-to-produce-test-cases)
- [ملفات الإعدادات](https://github.com/ffuf/ffuf#configuration-files)
- [المساعدة](https://github.com/ffuf/ffuf#usage)
- [الوضع التفاعلي](https://github.com/ffuf/ffuf#interactive-mode)
## التثبيت
- [حمّل](https://github.com/ffuf/ffuf/releases/latest) نسخة مصمّمة مسبقاً من [صفحة الإصدارات](https://github.com/ffuf/ffuf/releases/latest)، فك الضغط وشغّل!
_أو_
- إذا كنت على Windows مع [Scoop](https://scoop.sh/)، يمكن تثبيت ffuf بـ: `scoop install ffuf`
_أو_
- إذا كنت على Windows مع [Winget](https://learn.microsoft.com/en-us/windows/package-manager/)، يمكن تثبيت ffuf بـ: `winget install ffuf.ffuf`
_أو_
- إذا كنت على macOS مع [homebrew](https://brew.sh)، يمكن تثبيت 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`
1. يعتمد ffuf على Go 1.20 أو أحدث.
2. بناء Go من المستودع يُظهر `git-<تاريخ>-<تجزئة>` بدلاً من الوسم. البناء المحلي ليس إصداراً رسمياً حتى لو كنت على وسم، ومعلومات البناء المضمنة من Go تعطينا التجزئة ولكن ليس اسم الوسم — لذلك نعرض التجزئة الدقيقة التي بُني منها. النسخ الرسمية ذات الإصدارات هي الموجودة في صفحة الإصدارات.
## أمثلة الاستخدام
أمثلة الاستخدام أدناه تُظهر أبسط المهام التي يمكنك إنجازها باستخدام `ffuf`.
التوثيق الأكثر تفصيلاً الذي يغطي العديد من الميزات مع الكثير من الأمثلة متاح في ويكي ffuf على [https://github.com/ffuf/ffuf/wiki](https://github.com/ffuf/ffuf/wiki)
للحصول على توثيق أكثر شمولاً مع أمثلة واقعية ونصائح، تأكد من الاطلاع على الدليل الرائع:
"[كل ما تحتاج معرفته عن FFUF](https://codingo.io/tools/ffuf/bounty/2020/09/17/everything-you-need-to-know-about-ffuf.html)" بقلم
Michael Skelton ([@codingo](https://github.com/codingo)).
يمكنك أيضاً التدرب على فحوصات ffuf ضد مضيف حي مع دروس وحالات استخدام مختلفة إما محلياً باستخدام حاوية docker https://github.com/adamtlangley/ffufme أو ضد النسخة المستضافة على http://ffuf.me التي أنشأها Adam Langley [@adamtlangley](https://twitter.com/adamtlangley).
### اكتشاف الدليل النموذجي
[](https://asciinema.org/a/211350)
باستخدام الكلمة المفتاحية FUZZ في نهاية URL (`-u`):
```
ffuf -w /path/to/wordlist -u https://target/FUZZ
```
### اكتشاف المضيف الافتراضي (بدون سجلات DNS)
[](https://asciinema.org/a/211360)
بافتراض أن حجم استجابة المضيف الافتراضي هو 4242 بايت، يمكننا تصفية جميع الاستجابات بهذا الحجم (`-fs 4242`) أثناء تخمين الرأس Host -:
```
ffuf -w /path/to/vhost/wordlist -u https://target -H "Host: FUZZ" -fs 4242
```
### تخمين معاملات GET
تخمين اسم معامل 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
```
### تخمين بيانات POST
هذه عملية مباشرة للغاية، باستخدام الكلمة المفتاحية `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](https://gitlab.com/akihe/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](https://gitlab.com/akihe/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/blob/master/ffufrc.example).
وصف أكثر تفصيلاً عن مواقع ملفات الإعدادات موجود في الويكي:
[https://github.com/ffuf/ffuf/wiki/Configuration](https://github.com/ffuf/ffuf/wiki/Configuration)
خيارات الإعداد المقدمة من سطر الأوامر تتجاوز تلك المحملة من ملف `ffufrc` الافتراضي.
ملاحظة: لا ينطبق هذا على أعلام CLI التي يمكن توفيرها أكثر من مرة. أحد هذه الأمثلة هو العلم `-H` (الرأس).
في هذه الحالة، سيتم _إلحاق_ قيم `-H` المقدمة في سطر الأوامر بتلك الموجودة في ملف الإعداد بدلاً من ذلك.
بالإضافة إلى ذلك، في حالة رغبتك في استخدام مجموعة من ملفات الإعدادات لحالات استخدام مختلفة، يمكنك القيام بذلك عن طريق
تعريف مسار ملف الإعداد باستخدام علم سطر الأوامر `-config` الذي يأخذ مسار ملف الإعداد كمعامل له.
<p align="center">
<img width="250" src="https://assets.kitploit.com/production/public/readmes/365/909c2e84347941ae0f0525fc3d8d9b39143a3859d4a24aecbfd581fbb4134f67.png">
</p>
## الاستخدام
لتحديد حالة الاختبار لـ 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`، الذي يعيد تعيين الحالة ويبدأ المهمة الحالية من البداية.
<p align="center">
<img width="250" src="https://assets.kitploit.com/production/public/readmes/365/2705ba6f9fe2d16f8679e971afabf942e68be141a81d1e0f820f53aac2dda032.png">
</p>
## المساهمة
نرحب بتقارير الأخطاء وطلبات الميزات وطلبات السحب. راجع
[CONTRIBUTING.md](https://github.com/ffuf/ffuf/blob/master/CONTRIBUTING.md) للبدء، و
[قسم المساهمة في الويكي](https://github.com/ffuf/ffuf/wiki/Contributing) للحصول على
وثائق العمارة والاختبار.
## الترخيص
ffuf مُصدَر تحت رخصة MIT. انظر [LICENSE](https://github.com/ffuf/ffuf/blob/master/LICENSE).