یکی از فعالیتهای مهم در آزمون نفوذ و همچنین مسابقات و چالشهای فتح پرچم، پیدا کردن اطلاعات مرتبط با فایلها و فهرستهای (فولدرهای) موجود در برنامههای مبتنی بر وب است. این موضوع از این منظر حائز اهمیت است که همیشه این آدرسها به صورت لینک یا از طریق صفحات اولیه ممکن است قابل رویت نباشند. در نتیجه، نیاز به مکانیزم مناسبی برای جستجو و کشف آنها است. به عنوان مثال فرض کنید که مسیر /mtoreihi در یک آدرس URL مانند https://www.daneshbaan.com وجود داشته باشد. ولی هیچ لینک یا ارجاعی به آن موجود نباشد. در این صورت چگونه باید آن را کشف کنیم؟ به عنوان مثالی دیگر ممکن است که فایل log.txt نیز در همان آدرس فوق قابل مشاهده بوده و حاوی اطلاعات محرمانه یا مهمی باشد. در نتیجه، نیاز به یک روش سیستماتیک جهت کشف این موارد است.
ابزارهای متنوعی در این زمینه وجود داشته که با استفاده از آنها امکان انجام brute force (یا همان پیمایش حالتهای مختلف) بر روی یک آدرس URL وجود خواهد داشت. روش عمومی کارکرد در این ابزارها این است که یک فایل حاوی کلیه لغات و عبارات متصور و محتمل (که به آن wordlist یا dictionary هم گفته میشود) را به عنوان ورودی دریافت کرده و سپس تمامی خطوط (لغات) آنها را یک به یک تست و بررسی میکنند. البته حالات استثنائی هم وجود دارد مانند ابزار dirhunt که بدون دریافت هیچ لیستی، صرفاً از طریق پیمایش آدرسهای موجود و قابل دسترس (یا بررسی فولدرهایی که پیمایش و مشاهده مسیرهای آنها باز است یعنی همان directory traversal) عمل میکند. سپس بر اساس کد پاسخ HTTP، نسبت به موجود بودن این فهرست یا نبودن آن گزارش خروجی ارائه میکنند. مثلاً چنانچه در مثال فوق نتیجه بررسی آدرس https://www.daneshbaan.com/mtoreihi منجر به کد پاسخ ۴۰۳ یا مثلاً ۲۰۰ شود این اطمینان وجود خواهد داشت که این مسیر وجود دارد.
بعضی از معروفترین و پرکاربردترین این ابزارها عبارتند از:
- dirbuster
- dirb
- dirsearch
- dirhunt
- gobuster
- h2buster
- wfuzz
- Metasploit (auxiliary/scanner/http/dir_scanner)
نکته حائز اهمیتی که در اینجا وجود دارد این است که هر یک از آنها مزایا و معایب خود را داشته ولیکن در بیشتر موارد مشابه هستند. در این مقاله برخی از ویژگیهای آنها را بررسی کرده و در مقالات بعدی در رابطه با بعضی از آنها همراه با مثالهای کاربردی توضیح داده و نحوه استفاده از آنها را تشریح میکنیم. این نکته خیلی مهم است که به عنوان یک متخصص آزمون نفوذ بتوانیم اولاً نحوه کارکرد ابزار یا ابزارها را درک کنیم، دوماً توانایی کار با ابزارهای گوناگون در یک حوزه را داشته باشیم و ترجیحاً مزایا و معایب آنها را بدانیم تا بتوانیم در موقع مقتضی از هر کدام از آنها که خواستیم استفاده کنیم و سوماً، توانایی نوشتن یک ابزار یا برنامه با قابلیتهای یکسان و مشابه را دارا باشیم.
در جدول زیر برخی از ابزارهای متداول به همراه ویژگیهای هر یک مشخص شده است.
نام ابزار | زبان برنامه نویسی | برخی از ویژگیها |
dirbuster | Java | · واسط گرافیکی
· پشتیبانی از لیست لغات · مکانیزم چند نخی (Multi-threading) · پشتیبانی از پسوند |
dirb | C | · نوشته شده به زبان C
· پشتیبانی از لیست لغات |
dirsearch | Python
| · پشتیبانی از لیست لغات
· پشتیبانی از چند نخی · امکان ایجاد تأخیر بین درخواستها · وجود پیادهسازی دیگر از همان پروژه به زبان Go و با همان نام · پشتیبانی از چندین پسوند همزمان · پشیبانی از محتوای تصادفی و متغیر در User agent · پشتیبانی از پیمایش و پویش بازگشتی (Recursive) · پشیبانی از پراکسی · گزارشدهی و خروجی در قالب متن و JSON |
dirhunt | Python | · بسیار سریع (بر اساس محتوای صفحات موجود عمل کرده و نیاز به لیست لغات ندارد ولیکن ممکن است نتیجهی مورد نظر استخراج نگردد!)
· مکانیزم کارکردی متفاوت و منحصر به فرد · امکان پردازش چند سایت همزمان · امکان ایجاد تأخیر بین درخواستها · امکان جستجو بر اساس Google, VirusTotal, robots.txt |
gobuster | Go | · نوشته شده به زبان Go (جهت تحلیل و استفاده از کد میتواند مناسب باشد)
· پشتیبانی از چند نخی · سرعت بالا (به واسطه استفاده از زبان Go) · امکان مدیریت کدهای HTTP پاسخ · پشتیبانی از لیست لغات · امکان پویش زیردامنههای DNS · امکان ایجاد تأخیر بین درخواستها · پشتیبانی از پراکسی · امکان ارسال هدرها و کوکیهای دلخواه |
h2buster | Python | · پشتیبانی از http/2
· پشتیبانی از چند نخی · امکان استفاده از چندین Connection · امکان پیکربندی تعداد فهرستهای تو در تو (ماکزیمم حالت Recursive) · پشتیبانی از چندین پسوند · پشتیبانی از هدرهای دلخواه |
wfuzz | Python | · پشتیبانی از لیست لغت
· امکان انجام عملیات فازینگ چندگانه · سرعت مناسب و قابلیتهای گوناگون · پشتیبانی از چند نخی · پشتیبانی از پسوندهای مختلف · پشتیبانی از هدرها و کوکیهای دلخواه · امکان مدیریت کدهای HTTP پاسخ |
Metasploit | Ruby | · در قالب ماژول Metasploit و مبتنی بر زبان Ruby
· پشتیبانی از لیست لغت · پشتیبانی از پراکسی · پشتیبانی از چند نخی |
من شخصاً به صورت معمول از Gobuster و wfuzz با توجه به ویژگیهای آنها بیشتر استفاده میکنم. اگر نیاز به فازینگ نباشد معمولاً از Gobuster و اگر نیاز به فازینگ باشد از wfuzz استفاده میکنم. در مقالات دیگر بعضی از این ابزارها را تشریح و به صورت عملیاتی بررسی خواهیم کرد و با نحوه نصب و کارکرد آنها آشنا میشویم.