TTPS · روش‌ها و تکنیک‌ها آزمون خودکار

Fuzzing — فاز‌تستینگ

Fuzzing

فازینگ یعنی ارسال انبوه و سیستماتیک ورودی به یک نقطه‌ی مشخص و قضاوت درباره‌ی پاسخ‌ها؛ در تست نفوذ وب، این ابزار اصلی کشف مسیرها و پارامترهایی است که هیچ‌جا به آن‌ها لینک داده نشده.

تیم فنی پی‌هانتر

فازینگ در بستر برنامه‌ی وب چیست؟

فازینگ در معنای عام یعنی تغذیه‌ی یک سامانه با ورودی‌های فراوان و مشاهده‌ی رفتار غیرعادی. در تست نفوذ وب، این تعریف شکل مشخص‌تری می‌گیرد: شما یک نقطه در درخواست HTTP را نشانه‌گذاری می‌کنید، هزاران مقدار از یک واژه‌نامه در آن جای می‌دهید، و پاسخ‌ها را بر اساس تفاوت دسته‌بندی می‌کنید.

تفاوتش با اسکن آسیب‌پذیری مهم است: اسکنری مثل Nuclei دنبال الگوی شناخته‌شده می‌گردد و می‌داند چه چیزی «یافته» است؛ فازر چنین دانشی ندارد و فقط تفاوت را نشان می‌دهد. فازینگ ابزار کشف است، نه تشخیص، و خروجی خامش بدون قضاوت انسانی ارزش گزارش‌شدن ندارد.

نقطه‌ای که فاز می‌شود می‌تواند هر جای درخواست باشد — نکته‌ای که بیشتر مطالب فارسی از قلم می‌اندازند: مسیر URL، نام و مقدار پارامتر، بدنه‌ی POST، کوکی، هدر سفارشی و حتی هدر Host برای کشف میزبان‌های مجازی. در ffuf همه‌ی این‌ها با قرار دادن کلیدواژه‌ی FUZZ در همان موقعیت انجام می‌شود.

دو کاربرد اصلی: کشف محتوا و فاز کردن پارامتر

کشف محتوا یعنی یافتن مسیرها و فایل‌هایی که هیچ‌جا به آن‌ها لینک نشده: پنل مدیریت فراموش‌شده، config.php.bak، مخزن .git رهاشده، .env، مستندات Swagger داخلی و نسخه‌های قدیمی API — همان چیزی که راهنمای آزمون OWASP ذیل فایل‌های قدیمی، پشتیبان و بدون ارجاع می‌سنجد.

ffuf -u https://target.example/FUZZ \
  -w /path/SecLists/Discovery/Web-Content/raft-medium-directories.txt \
  -mc all -fc 404 -ac -recursion -recursion-depth 2

فاز کردن پارامتر دو حالت دارد. اول کشف نام پارامترهای پنهان مثل debug، template یا redirect که در هیچ فرمی دیده نمی‌شوند و اغلب کم‌آزموده‌ترین بخش برنامه‌اند. دوم فاز کردن مقدار پارامتر برای یافتن رفتار متفاوت — مبنای کشف IDOR روی شناسه‌های ترتیبی، LFI روی پارامتر مسیر، و شمارش حساب‌ها روی فرم ورود.

ffuf -u "https://target.example/api/item?FUZZ=1" \
  -w params.txt -fs 1234

استراتژی واژه‌نامه

کیفیت فازینگ بیش از هر چیز به واژه‌نامه وابسته است. مجموعه‌ی مرجع SecLists است (مجوز MIT، بنیان‌گذار Daniel Miessler، نگهدارنده‌ی فعال از ۲۰۲۱ ItsIgnacioPortal) با پوشه‌هایی مثل Discovery/، Passwords/، Fuzzing/ و Payloads/، و دسته‌ای تازه برای آزمون مدل‌های زبانی.

سه نکته‌ی عملی که در کار واقعی تفاوت می‌سازند:

  • انتخاب فهرست مهم‌تر از اندازه‌ی آن است. نقطه‌ی شروع متعارف، فهرست‌های raft-* و directory-list-2.3-medium.txt در مسیر Discovery/Web-Content/ است. فهرست پرارجاعِ common.txt کوچک و کم‌بازده است.
  • واژه‌نامه را به هدف نزدیک کنید. پسوند فایل را با پشته‌ی واقعی تطبیق دهید (-e .php,.bak برای PHP معنا دارد، برای یک برنامه‌ی Go تقریباً هیچ) و فهرست اختصاصی از نام محصولات و اصطلاحات همان سازمان بسازید که در مرحله‌ی شناسایی جمع شده است.
  • مکمل‌ها: واژه‌نامه‌های Assetnote (تولیدشده از خزش واقعی وب) و PayloadsAllTheThings که مجموعه‌ی پی‌لود است، نه واژه‌نامه.

یک هشدار عملیاتی: مخزن SecLists بزرگ است، کلون کاملش زمان‌بر است و — همان‌طور که خودِ مخزن اعلام کرده — احتمالاً هشدار مثبت کاذب آنتی‌ویروس تولید می‌کند.

فیلتر، کالیبراسیون و مثبت کاذب

مشکل اصلی فازینگ، حجم نتیجه‌ی بی‌ارزش است. برنامه‌های مدرن اغلب برای مسیر ناموجود هم پاسخ 200 با صفحه‌ی خطای زیبا برمی‌گردانند — پدیده‌ی «۴۰۴ نرم» که فیلتر ساده بر اساس کد وضعیت را بی‌اثر می‌کند.

ابزار حل مسئله در ffuf مجموعه‌ی فیلترهاست: -fc (کد وضعیت)، -fs (اندازه‌ی پاسخ)، -fw (تعداد کلمات)، -fl (تعداد خطوط) و -fr (عبارت منظم در بدنه)؛ معادل «فقط این‌ها را نشان بده» هم وجود دارد (-mc، -ms). سویچ -ac کالیبراسیون خودکار را فعال می‌کند: ابزار چند مسیر قطعاً ناموجود می‌فرستد، رفتار پاسخ منفی را یاد می‌گیرد و همان الگو را فیلتر می‌کند.

روال حرفه‌ای این است:

  1. یک اجرای کوتاه با واژه‌نامه‌ی کوچک برای شناخت رفتار پایه، سپس تنظیم فیلترها و اجرای اصلی.
  2. بازگشت (recursion) با عمق محدود — عمق ۲ یا ۳ معمولاً کافی است؛ عمق نامحدود روی سایتی با مسیرهای پویا هرگز تمام نمی‌شود.
  3. راستی‌آزمایی دستی هر یافته. نتیجه‌ی فازر تا وقتی در مرورگر یا Repeater باز نشده، یافته نیست.
نکته‌ی نرخ و پایداری

فازینگ ذاتاً پرترافیک است؛ نرخ (-rate) و تعداد رشته‌ها (-t) را متناسب با محیط تنظیم کنید. اجرای بی‌محابا روی محیط عملیاتی می‌تواند به اختلال سرویس منجر شود و سقف نرخ باید از پیش در قرارداد توافق شده باشد.

ابزارها

ابزارنقطه‌ی قوتوضعیت
ffufسریع، انعطاف‌پذیر، کلیدواژه‌ی FUZZ در هر موقعیت درخواستنسخه‌ی v2.1.0، سپتامبر ۲۰۲۳
feroxbusterنوشته‌شده با Rust؛ به‌صورت پیش‌فرض بازگشتی است — تمایز اصلی‌اش با ffufنسخه‌ی v2.13.1، دسامبر ۲۰۲۵
dirsearchپایتون؛ تشخیص خودکار طرح آدرس، خروجی SQLite، ذخیره و ازسرگیری اسکننسخه‌ی v0.4.3
Burp Intruderیکپارچه با جریان کار دستی؛ مناسب مجموعه‌های کوچکدر نسخه‌ی Community به‌شدت محدود شده است

دو نکته‌ی صادقانه. اول: آخرین نسخه‌ی برچسب‌خورده‌ی ffuf همان v2.1.0 از سپتامبر ۲۰۲۳ است؛ مخزن هنوز فعال است و ffuf استاندارد عملی این حوزه مانده، اما «مدام به‌روزرسانی می‌شود» توصیف درستی نیست — پایدار و پرکاربرد است ولی چرخه‌ی انتشارش متوقف شده. دوم: نسخه‌ی رایگان Burp Suite فقط نمونه‌ی نمایشی Intruder را دارد که با محدودیت شدید نرخ عرضه می‌شود و برای فازینگ واقعی به کار نمی‌آید.

فازینگ پروتکل و فازینگ پوشش‌محور: یک رشته‌ی دیگر

آنچه تا اینجا گفته شد، فازینگ مبتنی بر واژه‌نامه در سطح HTTP است. رشته‌ی دیگری هم وجود دارد: فازینگ پوشش‌محور روی کد بومی. در این رویکرد باینری هدف با ابزاردقیق کامپایل می‌شود، فازر ورودی‌ها را جهش می‌دهد و از مسیرهای اجرایی تازه بازخورد می‌گیرد، و خطاها با تحلیل‌گرهای زمان اجرا (مثل AddressSanitizer) شکار می‌شوند؛ AFL++ و libFuzzer شناخته‌شده‌ترین نمایندگان آن‌اند.

کاربرد اصلی‌اش یافتن خطاهای مدیریت حافظه در C/C++ و تجزیه‌کننده‌های تصویر، فونت، PDF و پروتکل‌های باینری است. ارتباطش با وب غیرمستقیم اما واقعی است: بسیاری از برنامه‌ها فایل آپلودی را به یک کتابخانه‌ی بومی می‌سپارند.

باور غلط رایج

«فازینگ یعنی اجرای ffuf با بزرگ‌ترین واژه‌نامه‌ی ممکن.» فازینگ بدون کالیبراسیون و فیلتر، هزاران مثبت کاذب و اطمینان کاذب تولید می‌کند. ضمناً فازینگ آسیب‌پذیری «کشف» نمی‌کند؛ فقط تفاوت رفتار را نشان می‌دهد و آنچه یافته را می‌سازد تفسیر و راستی‌آزمایی دستی است. جای بازبینی کد و آزمون دستی منطق کسب‌وکار را هم نمی‌گیرد.

پرسش‌های متداول

تفاوت فازینگ با اسکن آسیب‌پذیری چیست؟

اسکنر دنبال الگوی از پیش تعریف‌شده می‌گردد و می‌داند چه چیزی یافته است؛ فازر فقط ورودی‌های فراوان می‌فرستد و تفاوت پاسخ‌ها را نشان می‌دهد. یعنی فازینگ ابزار کشف است و تفسیر خروجی با تستر. در عمل این دو مکمل‌اند: فازینگ سطح حمله را بزرگ‌تر می‌کند و اسکنر روی آن سطح، بررسی‌های شناخته‌شده را اجرا می‌کند.

بهترین واژه‌نامه برای کشف مسیر کدام است؟

نقطه‌ی شروع متعارف، فهرست‌های raft-* و directory-list-2.3-medium.txt از پوشه‌ی Discovery/Web-Content/ در SecLists است؛ common.txt کوچک و کم‌بازده است. مهم‌تر از اندازه، تطبیق واژه‌نامه با پشته‌ی هدف و ساختن فهرست اختصاصی از نام‌های همان سازمان است.

آیا ffuf هنوز به‌روزرسانی می‌شود؟

آخرین نسخه‌ی برچسب‌خورده‌ی ffuf نسخه‌ی v2.1.0 از سپتامبر ۲۰۲۳ است. مخزن همچنان کامیت و فعالیت دارد و ffuf در عمل استاندارد این حوزه باقی مانده، اما ادعای «مدام به‌روزرسانی می‌شود» درست نیست. اگر بازگشت خودکار و نسخه‌ی تازه‌تر برایتان مهم است، feroxbuster گزینه‌ی فعال‌تری است.

آیا فازینگ می‌تواند به سایت آسیب بزند؟

بله، اگر بی‌محابا اجرا شود. ده‌ها هزار درخواست در دقیقه می‌تواند منابع سرور را اشباع کند، جدول‌های لاگ را پر کند یا فرایندهای پس‌زمینه‌ی پرهزینه را فعال کند. در یک تست حرفه‌ای، سقف نرخ و پنجره‌ی زمانی اجرا از پیش در قرارداد توافق می‌شود و اجرا روی محیط عملیاتی با احتیاط انجام می‌گیرد.

پیشگیری / رفع

فازینگ آسیب‌پذیری نیست، تکنیک است؛ آنچه در ادامه می‌آید هم برای اجرای درست آن است و هم برای کاهش بازدهی‌اش علیه شما:

  1. در سمت اجرا: نرخ را با مالک سامانه توافق کنید، دامنه را به دارایی‌های مجاز محدود کنید و هر یافته را پیش از ثبت دستی راستی‌آزمایی کنید.
  2. در سمت دفاع، ریشه را ببندید: فایل‌های پشتیبان، مخزن نسخه، پیکربندی و مستندات داخلی نباید در ریشه‌ی وب باشند — مؤثرترین اقدام، چون فازینگ فقط چیزی را می‌یابد که وجود دارد.
  3. فهرست‌شدن دایرکتوری را غیرفعال کنید و پاسخ مسیر ناموجود را یکنواخت نگه دارید.
  4. مجوزدهی را به «کشف‌نشدن» گره نزنید. پنل مدیریتی روی مسیر حدس‌نزدنی، همچنان بدون کنترل دسترسی است؛ رد پیش‌فرض را در سمت سرور اعمال کنید.
  5. محدودسازی نرخ و پایش: حجم بالای پاسخ 404 از یک منبع، ساده‌ترین سیگنال تشخیص است — به شرطی که کسی آن را ببیند. ضمناً ورودی‌های آپلودی را در سرویس جداشده پردازش کنید، چون تجزیه‌کننده‌های بومی همان‌جایی‌اند که فازینگ پوشش‌محور در آن‌ها باگ پیدا می‌کند.

کشف محتوا یکی از نخستین گام‌های هر تست نفوذ وب است؛ چارچوب کامل مراحل در راهنمای تست نفوذ وب آمده است.

→ بازگشت به دانشنامه
PUT IT TO THE TEST

امنیت سامانه‌ی شما را
به مهاجمان واگذار نکنید

تیم پی‌هانتر با دیدِ یک مهاجم واقعی، این آسیب‌پذیری‌ها و ده‌ها مورد دیگر را روی دارایی‌های شما می‌سنجد.