الـ Directory Brute Force
إزاي تلاقي paths وملفات مخبّية بـ gobuster و ffuf و wordlists زي SecLists، وتفهم الـ Status Codes، وتجرّب Extensions، وتعمل brute force بسيط بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
مش كل صفحات الموقع ليها links. فيه صفحات admin، وملفات backup، و folders قديمة، محدش حط لها link، بس لسه موجودة على الـ server.
الفكرة: تجرّب آلاف الأسماء من wordlist، وتشوف الـ server بيرد بإيه. الأدوات: gobuster و ffuf و feroxbuster. والـ wordlists الأشهر في SecLists، زي common dot txt.
لازم تفهم الـ Status Codes: two hundred، الصفحة موجودة. three oh one أو three oh two، redirect، غالباً لصفحة login. four oh three، موجودة بس ممنوع تدخل، وده معناه إن فيه حاجة هنا. و four oh four، مش موجودة. عندنا web server وهمي للتجربة، و function اسمها get بترجّع الـ status. نلِف على الـ wordlist، ونطبع أي حاجة مش four oh four، بنفس شكل gobuster. نشغّل… لقينا admin و backup و uploads. بس فيه ملفات زي login dot php و config dot php dot bak ما ظهرتش، علشان إحنا بنجرّب أسماء من غير extensions.
# Our lab web server: path -> HTTP status (a real tool sends GET requests)
SITE = {"/": 200, "/admin": 302, "/backup": 403, "/uploads": 200,
"/config.php.bak": 200, "/login.php": 200}
def get(path):
return SITE.get(path, 404)
wordlist = ["admin", "images", "backup", "uploads", "test", "login"]
for word in wordlist:
path = "/" + word
status = get(path)
if status != 404:
print(f"{path:18} (Status: {status})")المخرجات
/admin (Status: 302) /backup (Status: 403) /uploads (Status: 200)
دورك: جرّب كل كلمة مع تلات extensions: من غير، و dot php، و dot php dot bak. وضيف كلمة config للـ wordlist.
extensions = ["", ".php", ".php.bak"] ولِف عليهم جُوّه الـ loop.
الحل: نشغّل… ظهر config dot php dot bak، وده ممكن يبقى فيه باسورد الـ database على طول. علشان كده الـ extensions مهمة جداً.
# Our lab web server: path -> HTTP status (a real tool sends GET requests)
SITE = {"/": 200, "/admin": 302, "/backup": 403, "/uploads": 200,
"/config.php.bak": 200, "/login.php": 200}
def get(path):
return SITE.get(path, 404)
wordlist = ["admin", "images", "backup", "uploads", "test", "login"]
extensions = ["", ".php", ".php.bak"]
for word in wordlist + ["config"]:
for ext in extensions:
path = "/" + word + ext
status = get(path)
if status != 404:
print(f"{path:18} (Status: {status})")المخرجات
/admin (Status: 302) /backup (Status: 403) /uploads (Status: 200) /login.php (Status: 200) /config.php.bak (Status: 200)
الدرس الجاي: خدمة مهمة جداً في شبكات Windows: SMB. يلا بينا.
03 / دروس المسار (22)
- 01يعني إيه جمع معلومات (Recon)؟
- 02سلبي ولا نشط؟ والنطاق القانوني
- 03WHOIS: مين صاحب الـ Domain؟
- 04سجلات DNS: كنز المعلومات
- 05اكتشاف الـ Subdomains
- 06Certificate Transparency: الشهادات بتتكلم
- 07Google Dorking
- 08OSINT: الموظفين والإيميلات
- 09الـ Metadata: أسرار جُوّه الملفات
- 10اكتشاف الأجهزة الشغّالة (Host Discovery)
- 11الـ Port Scanning بيشتغل إزاي؟
- 12Nmap: البداية
- 13أنواع الـ Scan والسرعة في Nmap
- 14كشف الخدمات والإصدارات ونظام التشغيل
- 15NSE Scripts وحفظ النتايج
- 16تعداد الويب: الـ Headers والتكنولوجيا
- 17الـ Directory Brute Forceانت هنا
- 18تعداد SMB
- 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
- 20تنظيم نتايج الـ Recon
- 21أتمتة الـ Recon بـ Python
- 22مراجعة شاملة وخطة Recon