
مُشوش بروتوكول الشبكة الذي سنرغب في استخدامه.
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ مُختبر الشبكة Fuzzowski
█ █ █ █ 🄯 شركة Fuzzers
██ ██ بواسطة ماريو ريفاس
الفكرة هي أن تكون مُختبر بروتوكول الشبكة الذي سنرغب في استخدامه.
الهدف من هذه الأداة هو المساعدة طوال عملية اختبار بروتوكول الشبكة، مما يسمح بتعريف الاتصالات، والمساعدة في تحديد "المشتبه بهم" في تعطل الخدمة، وأكثر من ذلك بكثير.
[16/12/2019]
virtualenv venv -p python3
source venv/bin/activate
pip install -r requirements.txt
usage: python -m fuzzowski [-h] [-p {tcp,udp,ssl}] [-b BIND] [-st SEND_TIMEOUT]
[-rt RECV_TIMEOUT] [--sleep-time SLEEP_TIME] [-nc] [-tn]
[-nr] [-nrf] [-cr]
[--threshold-request CRASH_THRESHOLD_REQUEST]
[--threshold-element CRASH_THRESHOLD_ELEMENT]
[--ignore-aborted] [--ignore-reset] [--error-fuzz-issues]
[-c CALLBACK | --file FILENAME] -f
{cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
[-r FUZZ_REQUESTS [FUZZ_REQUESTS ...]]
[--restart module_name [args ...]]
[--restart-sleep RESTART_SLEEP_TIME]
[--monitors {IPPMon} [{IPPMon} ...]] [--path PATH]
[--document_url DOCUMENT_URL]
host port
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ مُختبر الشبكة Fuzzowski
█ █ █ █ 🄯 شركة Fuzzers
██ ██
الحجج الموضعية:
host المضيف الوجهة
port المنفذ الوجهة
الحجج الاختيارية:
-h, --help عرض رسالة المساعدة هذه والخروج
خيارات الاتصال:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
البروتوكول (الافتراضي tcp)
-b BIND, --bind BIND الربط بالمنفذ
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
ضبط مهلة send() (الافتراضي 5 ثوانٍ)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
ضبط مهلة recv() (الافتراضي 5 ثوانٍ)
--sleep-time SLEEP_TIME
وقت النوم بين كل اختبار (الافتراضي 0)
-nc, --new-conns فتح اتصال جديد بعد كل حزمة من نفس الاختبار
-tn, --transmit-next-node
إرسال العقدة التالية في الرسم البياني للعقدة المختبرة
خيارات RECV():
-nr, --no-recv عدم استقبال recv() في المقبس بعد كل إرسال
-nrf, --no-recv-fuzz عدم استقبال recv() في المقبس بعد إرسال طلب مختبر
-cr, --check-recv التحقق من استلام البيانات في recv()
خيارات الأعطال:
--threshold-request CRASH_THRESHOLD_REQUEST
تعيين عدد الأعطال المسموح بها في طلب قبل تخطيه (الافتراضي 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
تعيين عدد الأعطال المسموح بها في Primitive قبل تخطيه (الافتراضي 3)
--ignore-aborted تجاهل أخطاء ECONNABORTED
--ignore-reset تجاهل أخطاء ECONNRESET
--error-fuzz-issues تسجيل كمشكلة عند وجود أي مشكلة اتصال في العقدة المختبرة
خيارات الاختبار:
-c CALLBACK, --callback CALLBACK
تعيين عنوان رد نداء للاختبار باستخدام مولد رد النداء بدلاً من الطفرات العادية
--file FILENAME استخدام محتويات ملف للطفرات
المختبرون:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
البروتوكولات المتاحة
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
طلبات البروتوكول لاختبارها، الافتراضي الكل
dhcp: [opt82]
ipp: [http_headers, get_printer_attribs, print_uri_message, send_uri, get_jobs, get_job_attribs]
lpd: [long_queue, short_queue, ctrl_file, data_file, remove_job]
telnet_cli: [commands]
tftp: [read]
raw: ['\x01string\n' '\x02request2\x00' ...]
خيارات إعادة التشغيل:
--restart module_name [args ...]
وحدات إعادة التشغيل:
run: '<executable> [<argument> ...]' (مرر الأمر والحجج داخل علامات اقتباس، كحجة واحدة)
smartplug: سيُوقف تشغيل القابس الذكي ويعيد تشغيله
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
تعيين ثواني النوم بعد العطل قبل المتابعة (الافتراضي 5)
خيارات المراقبة:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
وحدات المراقبة:
IPPMon: يرسل رسالة IPP من نوع get-attributes إلى الهدف
خيارات أخرى:
--path PATH تعيين المسار عند اختبار بروتوكولات HTTP (الافتراضي /)
--document_url DOCUMENT_URL
تعيين عنوان URL للوثيقة لـ print_uri
اختبر عملية IPP get_printer_attribs مع الخيارات الافتراضية:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
استخدم الميزة الخام (raw) من IPP لاختبار بروتوكول finger:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
استخدم الميزة الخام من IPP لاختبار بروتوكول finger، ولكن بدلاً من استخدام الطفرات المحددة مسبقًا، استخدم ملفًا:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'path/to/my/fuzzlist'
مثال على المختبر ذي الحالة (stateful fuzzer)، يوضح استخدام s_response و s_variable للحصول على رمز مميز مطلوب لاختبار طلب. يعتمد هذا المثال على حالة اختبار خادم HTTP الوهمي