چگونه دایرکتوریها و فایلهای مخفی یک سرور را با پایتون و لیست کلمات کشف کنیم؟
در تست امنیت وب، تکنیک Brute-Forcing یک روش مؤثر برای کشف فایلها و دایرکتوریهای پنهان روی سرور است. این فایلها و دایرکتوریها ممکن است توسط توسعهدهندگان....
لیست مطالب
در تست امنیت وب، تکنیک Brute-Forcing یک روش مؤثر برای کشف فایلها و دایرکتوریهای پنهان روی سرور است. این فایلها و دایرکتوریها ممکن است توسط توسعهدهندگان به اشتباه باقی مانده باشند و به افشای اطلاعات حساس منجر شوند. استفاده از این روش به شما امکان میدهد تا فایلهایی مانند اسکریپتهای دیباگینگ، فایلهای پیکربندی و دیگر اجزای باقیمانده را پیدا کنید که میتوانند منجر به شناسایی نقاط ضعف امنیتی در سیستم شوند.
در این مقاله، ما یک ابزار ساده با استفاده از زبان برنامهنویسی پایتون برای brute-forcing دایرکتوریها و فایلهای مخفی ارائه خواهیم کرد. شما میتوانید از یک wordlist آماده که در مخزن abdal-brute-force-resource توسط ابراهیم شفیعی (EbraSha) ایجاد شده، استفاده کنید. این wordlist به شما کمک میکند تا فایلها و دایرکتوریهای پنهان را در یک سرور وب شناسایی کنید.
اهمیت Brute-Forcing دایرکتوریها و فایلها
وباپلیکیشنها به دلیل پیچیدگی بالا شامل فایلها و دایرکتوریهای زیادی هستند که برخی از آنها ممکن است به اشتباه در دسترس عموم قرار بگیرند. توسعهدهندگان گاهی فایلهایی با پسوندهایی مثل .bak، .php و .inc را که حاوی اطلاعات مهمی هستند، فراموش میکنند از سرور حذف کنند. مهاجمان و تسترهای نفوذ از این اطلاعات برای حمله به سیستم استفاده میکنند.
برای شناسایی این فایلها و دایرکتوریها، ما از یک فایل wordlist استفاده خواهیم کرد که در مخزن abdal-brute-force-resource در پوشه Brute-Forcing Directories and File Locations در دسترس است. با استفاده از این فایل و ابزار brute-forcing میتوانیم دایرکتوریها و فایلهای مخفی را پیدا کنیم.
مراحل اجرای Brute-Force با پایتون
ابتدا فایل wordlist را از مخزن تنظیم شده توسط ابراهیم شفیعی (EbraSha) دانلود کنید:
cd ~/Downloads
wget https://raw.githubusercontent.com/ebrasha/abdal-brute-force-resource/main/brute-forcing-directories-and-file-locations/all.txt
این فایل حاوی لیستی از مسیرها و فایلهای رایج است که ممکن است بر روی سرور وجود داشته باشند.
پیادهسازی ابزار Brute-Forcing با پایتون
اکنون، یک ابزار ساده پایتون برای brute-forcing دایرکتوریها و فایلها را ایجاد میکنیم. ابتدا یک فایل به نام bruter.py بسازید و کد زیر را در آن وارد کنید:
import queue
import requests
import threading
import sys
#-------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
#-------------------------------------------------------------------
# Main configuration variables
AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0"
EXTENSIONS = ['.php', '.bak', '.orig', '.inc']
TARGET = "http://testphp.vulnweb.com"
THREADS = 50
WORDLIST = "all.txt"
# Function to get words from wordlist file
def get_words(resume=None):
def extend_words(word):
if "." in word:
words.put(f'/{word}')
else:
words.put(f'/{word}/')
for extension in EXTENSIONS:
words.put(f'/{word}{extension}')
with open(WORDLIST) as f:
raw_words = f.read()
found_resume = False
words = queue.Queue()
for word in raw_words.split():
if resume is not None:
if found_resume:
extend_words(word)
elif word == resume:
found_resume = True
print(f'Resuming wordlist from: {resume}')
else:
extend_words(word)
return words
توضیح کد
این تابع get_words فایل all.txt را باز میکند و محتویات آن را در یک queue ذخیره میکند تا برای تست وجود دایرکتوریها و فایلها در سرور استفاده شود. تابع داخلی extend_words نیز برای هر کلمه پسوندهایی مانند .php و .bak را اضافه میکند تا بتوان فایلهای باقیمانده یا مخفی را کشف کرد.
پیادهسازی تابع اصلی Brute-Force
در این مرحله، تابع اصلی brute-forcing را پیادهسازی میکنیم تا با استفاده از کلمات موجود در فایل wordlist به سرور درخواست ارسال کند و دایرکتوریها و فایلهای موجود را بررسی کند:
def dir_bruter(words):
headers = {'User-Agent': AGENT}
while not words.empty():
url = f'{TARGET}{words.get()}'
try:
r = requests.get(url, headers=headers)
except requests.exceptions.ConnectionError:
sys.stderr.write('x'); sys.stderr.flush()
continue
if r.status_code == 200:
print(f'\nSuccess ({r.status_code}: {url})')
elif r.status_code == 404:
sys.stderr.write('.'); sys.stderr.flush()
else:
print(f'{r.status_code} => {url}')
توضیح تابع
این تابع با استفاده از لیست کلماتی که از get_words دریافت کرده است، به سرور هدف درخواستهایی ارسال میکند و وضعیت کد پاسخ سرور را بررسی میکند. اگر وضعیت 200 دریافت شود (موفقیتآمیز)، URL موفق چاپ میشود. اگر کد 404 (فایل یا دایرکتوری موجود نیست) باشد، برنامه بدون چاپ جزئیات به جستجو ادامه میدهد.
اجرای ابزار
برای اجرای ابزار، کافی است در بخش اصلی برنامه کد زیر را اضافه کنید:
if __name__ == '__main__':
words = get_words()
print('Press return to continue.')
sys.stdin.readline()
for _ in range(THREADS):
t = threading.Thread(target=dir_bruter, args=(words,))
t.start()
با استفاده از این ابزار ساده، شما قادر خواهید بود بهسرعت دایرکتوریها و فایلهای پنهان یک سرور وب را کشف کنید. این ابزار به شما کمک میکند تا با استفاده از wordlist تنظیم شده در مخزن ابراهیم شفیعی (EbraSha) بهصورت کارآمد فایلها و دایرکتوریهای حساس را شناسایی کنید و از آسیبپذیریهای احتمالی جلوگیری کنید.
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)