לדלג לתוכן

הזרקת LDAP - תרגיל

תרגיל 1 - עקיפת אותנטיקציה

משימות

  1. הקימו סביבת תרגול מקומית עם OpenLDAP ואפליקציית PHP:
# הקמת OpenLDAP עם Docker
docker run -d --name openldap \
    -e LDAP_ORGANISATION="TestOrg" \
    -e LDAP_DOMAIN="test.local" \
    -e LDAP_ADMIN_PASSWORD="admin" \
    -p 389:389 \
    osixia/openldap
  1. צרו אפליקציית PHP פשוטה עם טופס התחברות שמשתמשת ב-LDAP
  2. נסו את הפיילואדים הבאים בשדה שם המשתמש:
*
admin)(|(&
admin)(&))
*)(&
admin)%00
  1. תעדו אילו payloads הצליחו ולמה

תרגיל 2 - חילוץ עיוור

משימות

  1. בהינתן אפליקציה שמחזירה רק "Valid user" או "Invalid user":
  2. כתבו סקריפט Python שמחלץ שמות משתמשים:
import requests
import string

url = "http://target/search.php"
charset = string.ascii_lowercase + string.digits

def check(payload):
    response = requests.post(url, data={"username": payload, "password": "x"})
    return "Valid" in response.text

# השלימו: חילוץ שם משתמש תו אחר תו
username = ""
# ...
  1. הרחיבו את הסקריפט לחילוץ תכונות נוספות (מייל, מספר טלפון, שם מלא)
  2. חלצו את רשימת הקבוצות שהמשתמש חבר בהן

תרגיל 3 - ניתוח קוד פגיע

משימות

בהינתן קטעי הקוד הבאים, מצאו את החולשה וכתבו payload לניצול:

קוד 1 - PHP

$filter = "(cn=" . $_GET['name'] . ")";
$result = ldap_search($ldap, $base_dn, $filter);

קוד 2 - Java

String filter = "(&(department=" + dept + ")(title=" + title + "))";
NamingEnumeration results = ctx.search(baseDN, filter, controls);

קוד 3 - Python

filter_str = "(|(mail=%s)(uid=%s))" % (email, username)
results = conn.search_s(base_dn, ldap.SCOPE_SUBTREE, filter_str)

לכל קוד:
1. זהו את נקודת ההזרקה
2. כתבו payload לעקיפת אותנטיקציה
3. כתבו payload לחילוץ מידע
4. כתבו גרסה מתוקנת של הקוד


תרגיל 4 - גילוי מבנה ה-Directory

משימות

  1. בהינתן נקודת הזרקה ב-LDAP, מפו את מבנה הספרייה
  2. גלו את כל ה-Organizational Units:
# בדיקה אם ou קיים
*)(objectClass=organizationalUnit)(ou=A*
*)(objectClass=organizationalUnit)(ou=B*
  1. גלו את כל הקבוצות ואת החברים שלהן
  2. גלו את כל המשתמשים בכל OU
  3. ציירו דיאגרמה של מבנה הספרייה שגיליתם

תרגיל 5 - כתיבת כלי סריקה

משימות

כתבו כלי Python שמבצע:

  1. בדיקה האם פרמטר פגיע ל-LDAP injection
  2. זיהוי סוג ההזרקה (AND/OR based)
  3. חילוץ אוטומטי של שמות משתמשים
  4. חילוץ אוטומטי של תכונות
class LDAPScanner:
    def __init__(self, url, param_name):
        self.url = url
        self.param_name = param_name

    def detect_injection(self):
        """בודק אם הפרמטר פגיע"""
        # השלימו
        pass

    def extract_users(self):
        """מחלץ שמות משתמשים"""
        # השלימו
        pass

    def extract_attribute(self, username, attr_name):
        """מחלץ ערך של תכונה"""
        # השלימו
        pass

אתגר מסכם

תרחיש

מצאתם אפליקציית פורטל ארגוני שמשתמשת ב-LDAP לאותנטיקציה ולחיפוש עובדים.

משימות

  1. מצאו נקודת הזרקה בטופס ההתחברות
  2. עקפו את האותנטיקציה והתחברו כמנהל
  3. מצאו נקודת הזרקה בחיפוש העובדים
  4. חלצו את רשימת כל העובדים
  5. חלצו מספרי טלפון, כתובות מייל, וחברות בקבוצות
  6. מצאו את כל חברי קבוצת ה-Admins
  7. כתבו דוח מסכם עם המלצות תיקון