הזרקת LDAP - תרגיל¶
תרגיל 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
- צרו אפליקציית PHP פשוטה עם טופס התחברות שמשתמשת ב-LDAP
- נסו את הפיילואדים הבאים בשדה שם המשתמש:
- תעדו אילו payloads הצליחו ולמה
תרגיל 2 - חילוץ עיוור¶
משימות¶
- בהינתן אפליקציה שמחזירה רק "Valid user" או "Invalid user":
- כתבו סקריפט 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 = ""
# ...
- הרחיבו את הסקריפט לחילוץ תכונות נוספות (מייל, מספר טלפון, שם מלא)
- חלצו את רשימת הקבוצות שהמשתמש חבר בהן
תרגיל 3 - ניתוח קוד פגיע¶
משימות¶
בהינתן קטעי הקוד הבאים, מצאו את החולשה וכתבו payload לניצול:
קוד 1 - PHP¶
קוד 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¶
משימות¶
- בהינתן נקודת הזרקה ב-LDAP, מפו את מבנה הספרייה
- גלו את כל ה-Organizational Units:
# בדיקה אם ou קיים
*)(objectClass=organizationalUnit)(ou=A*
*)(objectClass=organizationalUnit)(ou=B*
- גלו את כל הקבוצות ואת החברים שלהן
- גלו את כל המשתמשים בכל OU
- ציירו דיאגרמה של מבנה הספרייה שגיליתם
תרגיל 5 - כתיבת כלי סריקה¶
משימות¶
כתבו כלי Python שמבצע:
- בדיקה האם פרמטר פגיע ל-LDAP injection
- זיהוי סוג ההזרקה (AND/OR based)
- חילוץ אוטומטי של שמות משתמשים
- חילוץ אוטומטי של תכונות
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 לאותנטיקציה ולחיפוש עובדים.
משימות¶
- מצאו נקודת הזרקה בטופס ההתחברות
- עקפו את האותנטיקציה והתחברו כמנהל
- מצאו נקודת הזרקה בחיפוש העובדים
- חלצו את רשימת כל העובדים
- חלצו מספרי טלפון, כתובות מייל, וחברות בקבוצות
- מצאו את כל חברי קבוצת ה-Admins
- כתבו דוח מסכם עם המלצות תיקון