توی این پست درباره ابزاری به اسم ffuf که برای fuzzing وبسایت استفاده میشه صحبت میکنم.
با این ابزار میشه هم زیر دامنه ها و هم فایل ها و پوشه ها و حتی پارامتر ها رو fuzz کرد.
این ابزار به صورت پیش فرض توی سیستم عامل کالی نصب است. برای نصب این ابزار در سیستم عامل هایی که دبین بیس هستن باید این دستور رو اجرا کنید:
sudo apt install ffuf
در سیستم عامل آرچ:
sudo pacman -S ffuf
در سیستم عامل فدورا و غیره هم میشه با گوگل کردن به راحتی دستور نصبش رو پیدا کرد. همچنین ffuf رو میشه در این ریپوزیتوری پیدا کرد.
بریم برای ادامه مطلب که چطور میشه از این ابزار استفاده کرد. با دستور ffuf -h میشه دستوراتی که وجود دارن رو دید. آپشن w- برای تنظیم لیست کلماتی که میخوایم باهاش فاز کنیم استفاده میشه مثل وردلیست های ریپوزیتوری seclist.
آپشن u- برای تنظیم آدرس وبسایت استفاده میشه.
برای اینکه پوشه هارو فاز کنیم از این دستور استفاده میکنیم:
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u http://website:port/FUZZ
آدرسی که من استفاده کردم برای وردلیست جاییه که ریپوزیتوری seclist در سیستم من قرار داره و ممکنه برای شما متفاوت باشه و یا از یک وردلیست دیگه استفاده کنید. برای آپشن u- هم باید اسم وبسایت به همراه پورت و قرار دادن کلمه FUZZ و یا هر کلمه دیگه ای که بعده وردلیست با : نشون میدیم باشه.
نکته: برای فاز کردن یک وبسایت که در بیرون از شبکه ای که شما بهش وصل هستین وجود نداره میتونید در فایل hosts سیستمتون که توی لینوکس در ادرس /etc/hosts/ قرار داره به صورت "IP website" تنظیم کنید که با استفاده از اسم وبسایت که خودتون تنظیم کردین به وبسایت وصل بشین و یا میتونید از آی پی به جای اسم استفاده کنید اما بعدها نیاز به این کار هست.
برای فاز کردن صفحات اول باید بفهمیم که وبسایت از چه پسوندی برای فایل ها استفاده میکنه که این کار هم با ابزار ffuf امکان پذیره!
برای اینکار این دستور رو اجرا میکنیم:
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/web-extensions.txt:FUZZ -u http://website:port/indexFUZZ
این وردلیست پسوند های معمول رو داره و میشه با استفاده از این وردلیست بفهمیم که وبسایتمون از چه پسوند هایی استفاده میکنه. در بخش آدرس فایل index رو انتخاب کردیم برای فاز کردن چون معمولا این فایل در همه جا قرار داره. بعده کلمه index فاصله ای قرار ندادم چون کلماتی که داخل اون وردلیست هستن با نقطه شروع میشن.
بعد از این کار میتونیم با آپشن e- که برای تنظیم پسوند استفاده میشه پسوند هارو تنظیم کنیم:
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u http://website:port/FUZZ -e .php,.php7
با این دستور دنبال فایل های با پسوند php و php7 میگردیم. اما وقتی ی پوشه دیگه پیدا کنیم بازم باید همین دستور رو برای اون پوشه بزنیم! کاره وقت بریه و مفید هم نیست، اما جای نگرانی هم نیست چون ابزار ffuf آپشن هایی برای حل این مشکل هم داره:
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u http://website:port/FUZZ -e .php,.php7 -recursion -recursion-depth 1
با آپشن recursion به ابزار میفهمونیم که میخوایم پوشه هایی که پیدا شد هم جستجو بشه، با آپشن recrusion-depth که به 1 تنظیم شده میفهمونیم بهش که نمیخوایم وقتی به /test/tests/ رسیدیم دوباره داخل tests هم بگردیم، با این کار وقتی پوشه هایی رو اول دیدیم که جالب به نظر میان، بعدا دنبال اونا میگردیم و سرعت کارمون بیشتر میشه.
برای اینکه آدرس کامل رو هم نشون میده میتونیم از آپشن v- استفاده کنیم.
برای پیدا کردن زیر دامنه هم میشه با همین ابزار اقدام کرد به این صورت:
ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt:FUZZ -u http://FUZZ.website:port/
در این صورت بیشتر درخواست ها با status code 200 نمایش داده میشن اما ممکنه درست نباشن و در این صورت چک میکنیم که زیر دامنه هایی که اشتباه هستن response size اشون چنده. این رو هم داخل ابزار ffuf نشون میده و بعد با استفاده از اون و با استفاده از آپشن fs- تنظیم میکنیم که از این response size چیزی رو نشون نده و response size های متفاوت رو نشون بده که احتمال درست بودن و کاربردی بودنشون هست.
بعضی مواقع هم پیش میاد که زیر دامنه با آی پی خود وبسایت یکی باشه که در این صورت بهش میگیم vhost. این رو میشه در وبسایت هایی که در بیرون از شبکه ما نیستن هم استفاده کرد و بعد از پیدا کردنش توی فایل hosts بعده اون ادرسی که تنظیم کردیم ی فاصله بدیم و ادرس جدید رو کنارش با زیر دامنه اش بزاریم.
برای پیدا کردن vhost چون نه داخل فایل hosts وجود داره ادرسش و نه داخل سرور های DNS باید راه دیگه ای رو پیش بگیریم:
ffuf -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt:FUZZ -u http://website:port/ -H "Host: FUZZ.website" -fs xxx
اینجا با استفاده از هدر Host فاز میکنیم و با استفاده از آپشن fs- آدرس هایی که اشتباه هستن رو فیلتر میکنیم.
با ابزار ffuf میشه پارامتر هارو هم فاز کرد!
برای این کار باید بدونیم پارامتر ها از نوع GET فرستاده میشن، یعنی توی آدرس تنظیم میشن یا که از نوع POST ان و در هدر data فرستاده میشن.
اگرم نمیدونیم کدومه و اسم پارامتر هم نمیدونیم میتونیم هردورو امتحان کنیم و اسم پارامتر های مختلف رو با ی مقدار ثابت بفرستیم و response size رو مشاهده کنیم. بعد با فیلتر کردن response size ها میفهمیم که چه پارامتر هایی قابل فرستادن هستن و بعد از اون هم یشه با فاز کردن مقدار صفحات مختلف رو بیاریم:
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://website:port/somepage?FUZZ=value -fs xxx
برای فاز کردن POST:
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://website:PORT/somepage -X POST -d 'FUZZ=key' -fs xxx
با این دستورات اسم پارامتر هارو فاز میکنیم و با fs نتایج رو فیلتر میکنیم. در قدم بعدی وقتی اسم پارامتر رو فهمیدیم میتونیم مقدار رو هم فاز کنیم که فقط جای FUZZ که برای اسم پارامتر گذاشتیم، خود اسم پارامتر رو میزاریم و برای مقدار هم از یک وردلیست استفاده میکنیم یا از جایی یا خودمون میسازیم و بعد جایگزین FUZZ میکنیم.
ممنون از وقت گذاشتنتون.