معرفی Wfuzz
ابزارهای زیادی توسعه یافته اند که یک درخواست HTTP ایجاد می کنند و به کاربر اجازه می دهند محتویات خود را تغییر دهند. Fuzzing به همین صورت عمل می کند. یک کاربر می تواند با تغییر بخش خاصی از درخواست، درخواست مشابهی را چندین بار به سرور ارسال کند. هنگامی که آن بخش خاص با یک متغیر از یک لیست یا فهرست جایگزین می شود، به آن fuzzing می گویند.
در این مقاله، ما یاد میگیریم که چگونه میتوانیم از wfuzz استفاده کنیم، که عبارت «Web Application Fuzzer» را بیان میکند، که یک ابزار متنباز جالب برای فاز کردن وب است. از زمان انتشار آن، بسیاری از مردم به سمت wfuzz گرایش پیدا کرده اند، به ویژه در سناریوی پاداش باگ از این پروژه استفاده زیادی می شود.
مقدمه ای بر Wfuzz
Wfuzz یک برنامه کدگذاری شده پایتون برای ایجاد فاز در برنامه های وب با گزینه های فراوان است. فیلترهای مختلفی را ارائه می دهد که به فرد امکان می دهد یک درخواست وب ساده را با یک کلمه مورد نیاز با جایگزین کردن آن با متغیر “FUZZ” جایگزین کند.
برای نصب این ابزار میتوانید از دستور زیر استفاده کنید :
pip3 install wfuzz
همین کار را می توان با نصب از منبع با استفاده از git به دست آورد.
git clone https://github.com/xmendez/wfuzz.git
خب بعد از وارد شدن به پوشه wfuzz دستور ls را میزنیم و محتویات پوشه را مشاهده میکنیم. و برای بررسی دستورات بیشتر wfuzz از دستور wfuzz -h یا wfuzz –help استفاده میکنیم .
با استفاده از آپشن z- میتوانیم از یک ماژول استفاده کنیم.
معرفی Wfpayload and Wfencode
هنگامی که ابزار را از منبع نصب می کنید، فایل های اجرایی کامپایل شده به نام های wfpayload و wfencode در دسترس هستند. این فایلها مسئول تولید بار و رمزگذاری هستند. آنها را می توان به صورت جداگانه استفاده کرد. به عنوان مثال، دستور تولید ارقام از ۰ تا ۱۵ به شرح زیر است:
./wfpayload -z range,0-15
همانطور که می بینید، یک خطای pycurl وجود دارد. برای حل کردن این خطا از دستور زیر استفاده میکنیم :
apt --purge remove python3-pycurl && apt install libcurl4-openssl-dev libssl-dev
اکنون، وقتی wfencode را اجرا می کنید، که ماژولی برای رمزگذاری ورودی ارائه شده با استفاده از الگوریتم هش است، اکنون هیچ خطای pycurl وجود ندارد
./wfencode -e md5 ignite
اجرای Wfuzz بر روی داکر :
Wfuzz را می توان با استفاده از docker به روش زیر با استفاده از repo ghcr.io راه اندازی کرد. دستور مربوطه را می توان با جایگزینی آخرین متغیر wfuzz اجرا کرد.
نکته مهم اینجاست که حتما برای دور زدن تحریم ها dns خود را عوض کنید یا از نرم افزارهای تحریم شکن استفاده کنید .
docker run -v $(pwd)/wordlist:/wordlist/ -it ghcr.io/xmendez/wfuzz wfuzz
بخش Payloads
یک payload در Wfuzz منبع داده های ورودی است. Payload های موجود را می توان با اجرای زیر فهرست کرد:
wfuzz -e payloads
نمای دقیق را می توان با استفاده از فیلتر برش نیز مشاهده کرد:
wfuzz -z help --slice "list"
مبحث Subdomain Fuzzing
کشف زیر دامنه در سناریوهای تست نفوذ بسیار مفید است. اغلب، مهاجمان بهجای دامنههای اصلی، حملاتی را بر روی زیر دامنهها انجام میدهند و میتوان آن را به این صورت فاز کرد:
z- یک URL را برای ورود در حالت اسکن مشخص می کند و هرگونه خطای اتصال را نادیده می گیرد
w- استفاده از لیست کلمات در حالی که زیر دامنه bruteforce استفاده می شود را مشخص می کند.
همین امر را می توان با ارائه لیست زیر دامنه به صورت درون خطی نیز به دست آورد. فقط، payload (گزینه z-) باید با “فهرست” به عنوان ورودی ارائه شود. فهرست در قالب ITEM1-ITEM2-ITEM3 به شرح زیر ارائه شده است:
wfuzz -z list,CVS-testphp-admin-svn http://testphp.vulnweb.com/FUZZ
wfuzz -z list,CVS-testphp-admin-svn http://FUZZ.vulnweb.com/
مبحث Directory Fuzzing
فهرست راهنماها را می توان با استفاده از wfuzz درست مانند gobuster با استفاده از فهرست کلمات ارائه شده برشمرد. این را می توان با استفاده از یک سویئچ w- و وارد کردن مسیر فهرست کلمات انجام داد:
wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
همانطور که در اسکرین شات بالا می بینید، تمام نتایج از جمله صفحه یافت نشده حذف شده اند که مرور نتایج را طولانی تر میکند . بنابراین، برای مرتبسازی نتایج، میتوانیم از سویئچ sc- استفاده کنیم . سایر دستورات هم به عبارت زیر اند :
hc/sc code – : برای مشخص کردن کد مورد نظر
hw/sw NUM- : نمایش بر اساس تعداد خطوط در پاسخ
hc/sw NUM- : نمایش بر اساس تعداد کلمات در پاسخ
hc/sc NUM- : نمایش بر اساس تعداد کاراکترها در پاسخ
wfuzz -w wordlist/general/common.txt --sc 200,301 http://testphp.vulnweb.com/FUZZ
خروجی گرفتن از نتایج
خروجی Wfuzz را می توان با استفاده از گزینه f- در چندین فرمت ذخیره کرد.
گزینه f- به کاربر اجازه می دهد تا یک مسیر فایل را وارد کند و بعد از کاما یک چاپگر (که خروجی را فرمت می کند) مشخص کند.
wfuzz -w wordlist/general/common.txt -f /tmp/output,csv --sc 200,301 http://testphp.vulnweb.com/FUZZ
cat /tmp/output
ابتدا ورد لیست را به برنامه داده ایم و خروجی رو به صورت فایل csv ذخیره کرده ایم و همچنین وضعیت http status code را بر روی ۲۰۰ و ۳۰۱ قرار داده ایم . و در اخر فایل مورد نظر را با دستور cat مشاهده کردیم.
به جای csv، می توانید هر یک از فرمت های دیگر را مشخص کنید
wfuzz -e printers