ffuf طريقة استخدام أداة

مقدمة

ال fuzzing هي طريقة بنستخدمها علشان نكتشف الثغرات ونتأكد ان التطبيق شغال بشكل صحيح وبيعرف يتعامل مع انواع البيانات المختلفة من غير ما يتعطل, والfuzzing هو احد الطرق المستخدمة في عملية اختبار الصندوق الاسود للتطبيقات (Black Box Testing)

مثال

دي python function بتاخد عددين وترجع مجموعهم المفروض انها تجمع الاعداد الصحيحة فقط

دلوقتي عايزين نتاكد ان ال function بتشتغل بشكل صحيح ولا لا باستخدام ال fuzzing

هنستخدم function تانيه تعمل call لل function بتاعتنا و هتمررلها بعض الdata types المختلفه وتطبعلنا الناتج

بعد ما عملنا fuzz اتضح ان ال function مش بتشتغل بالشكل المطلوب وهو انها تجمع الاعداد الصحيحة فقط ولاكن ممكن تجمع ال floats او strings و في بعض الاحيان بترجع error

خلينا نصلح الfunction بتعاتنا ونختبرها تاني, عدلنا ال function وخليناها تتأكد من data type الاول قبل ما تنفذ عمليه الجمع

ودي نتيجة ال fuzzing , كدا ال function شغالة بالشكل المطلوب

نفس الكلام ممكن يطبق علي functions اكثر تعقيداً أو علي Applications, في المقال دا هشرح ازاي نعمل fuzz لتطبيقات الويب باستخدام أدا ffuf

طريقة استخدام الاداة

المثال رقم 1 (Directory brute forcing)

في المثال دا استخدمنا FFUF علشان نعمل directory brute forcing

1- استخدمنا w ك input method والقيمة بتاعتها ملف فيه بعض المسارات اللي عايزين نخمنها

2- ال u والقيمة بتاعتها ال URL المستهدف

3- كلمة FUZZ مع كل Request بيتم استبدالها بقيمة من ال word-list

المثال رقم 2 (FUZZ with multiple word-lists)

في المثال دا استخدمنا اكتر من word-list في عملية ال fuzzing واحدة فيها URL parameters والتانية في paths بالاضافة لاننا كتبنا جنب كل word-list كلمة مميزة وفصلنا بينهم ب : ال tool بتسبدل مكان الكلمات بقيمة من ال word-list اللي الكلمة مرتبطه بيها

بتستبدل كلمة PATH بقيمة من ال word-list المرتبطة بيها وكلمة PARAM بقيمة من ال word-list المرتبطة بيها

المثال رقم 3 (Proxy)

ffuf -w worldlist.txt -u https://example.com/FUZZ -x http://localhost:8080

ممكن تستخدم ال x option علشان تقدر تستخدم HTTP proxy زي brup او zap

المثال رقم 4 (use different HTTP Method)

ffuf -w wordlist.txt -u http://example.com/FUZZ -X POST

ممكن نستخدم X capital علشان نستخد HTTP method مختلفة

المثال رقم 5 (Matchers and Filters)

من الخواص المهمة في أداة ffuf هي ال Matchers وال Filters, طب هي لازمة الخواص دي؟ خلينا نتكلم عن ال Matchers

1- استخدامات ال Matchers

وانت بتعمل fuzzing ل web app وعايز الاداة تظهرلك نتائج بمواصفات معينة هنا يجي دور ال Matchers ودي في منها اربع انواع

النوع الاول mc ودي بنستخدمها لما نكون عايزين نعرض النتايج لstatus code معين

ffuf -w wordlist.txt -u https://example.com/FUZZ mc 200,302

النوع الثاني ml ودي بتظهر النتايج علي حسب عدد ال lines اللي في ال response

ffuf -w wordlist.txt -u https://example.com/FUZZ -ml 2

النوع الثالث mr ودي بتظهرلك النتايج بناء علي regex pattern معين انك مثلا عايز تشوف النتايج اللي فيها Error معين

ffuf -w wordlist.txt -u https://example.com/FUZZ -mr <regex pattern>

النوع الرابع ms ودي بتظهرلك النتايج علي حسب ال response size

ffuf -w wordlist.txt -u https://example.com/FUZZ -ms 300

النوع الخامس mw ودي بتظهرلك النتايج اللي فيها عدد معين مين الكلمات

ffuf -w wordlist.txt -u https://example.com/FUZZ -mw 50

2 - استخدمات ال Filters

عكس استخدمات ال Matchers وهي لو انت مش عايز تظهر نتايج بمواصفات معينة

ffuf -w wordlist -u https://example.com/FUZZ -fc 400

في المثال دا عملنا تصفية لل status codes 400

المثال رقم 6 (raw request as input)

دلوقتي لو معاك request معين في file تقدر تستخدمه مع fuff مع تعديل اي جزء في ال request علشان يتم استبدالة بقيمه من ال word-list

GET /FUZZ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
ffuf -w wordlist.txt -request <requst files>

المثال رقم 7 (save results)

تقدر تحفظ النتايج باستخدام ال o

ffuf -w wordlist.txt -u https://example.com/FUZZ -o <output file name>

تقدر كمان تختار نوع ال output file زي HTML او JSON او CSV باستخدام of

ffuf -w wordlist.txt -u https://example.com/FUZZ -o <output file name> -of <json or html or csv or all>

المثال رقم 8 (HTTP headers)

ممكن نستخدم HTTP header معينه مع ال Requests باستخدام ال H وكمان تقدر تستخدمها اكتر من مرة

ffuf -w wordlist.txt -u https://example.com/FUZZ -H 'User-Agent: Mozilla/5.0' -H 'X-Custom-Header: header value'

أمثلة عملية

المثال رقم 1 (V-Host Enumeration)

يعني ايه v-host ؟ هي اختصار ل virtual host و ال virtual hosting هي ميزية موجودة في ال web servers بتسمحلنا اننا نستضيف اكتر من web site علي نفس عنوان الانترنت ip address

يعني لو عندنا server عنوانه 1.1.1.1 نقدر نستضيف عليه النطاق example.com و admin.example.com و dev.example.com ولما بنحاول نتصفح موقع معين منهم بنطلبه من الweb server من خلال ال HTTP Host Header

curl http://admin.example.com
GET / HTTP/1.1
Host: admin.example.com
User-Agent: curl

دلوقتي لو عاوزين نكتشف ال v-hosts باستخدام ffuf نعمل ايه؟

1- هنعمل dns lookup لل host اللي معانا

2- محتاجين subdomains word-list : هنستعين ب seclists ودا مستودع علي github هتلاقي عليه word-lists كتير تساعدك.

هننزل word-list من قسم ال DNS علشان نستخدمها

3- هنجمع بين subdomains و الdomain في ملف واحد باستخدام Bash For loop:

for i in $( cat <subdominslist> )
do echo $i.<domain> >> <outputfile>
done

4- بعد كدا هناخد ال IP address وال word list اللي عملناها ونبدا fuzzing علي ال v-host

ffuf -w subdomains_worlist.txt -u http://<ip-address>/ -H 'Host: FUZZ' -mc 200,302,307,401

المثال رقم 2 (Testing for open redirects)

دلوقتي انا معايا URL بالشكل دا في parameter اسمه path المفروض بعمل تحويل علي ال home directory, عازين نتأكد أن ال redirection شغال بشكل صحيح

https://example.com/redir?path=/home

محتاجين open redirect payloads word-list, ممكن نعملها بنفسنا او ندور علي word-lists جاهزة

دا امثلة علي بعض ال payload اللي ممكن نستخدمها

//google.com
//whitelisted.com.evil.com
javascript:alert(1)
\/\/google.com
java%0d%0ascript%0d%0a:alert(1)
/google.com/
//google.com/
//google%00.com/

هنعمل fuzz لل path و هنعمل Match لل redirects status codes

ffuf -w payloads_list.txt -u https://example.com/redir?path=FUZZ -mc 300,301,302,303,304,305,307,308

المصادر

Last updated