<LDAP://ldapsunucusu>;(givenName=Ali);cn,telephoneNumber,department
Sorgu Özellikleri Enjeksiyonu
Eğer LDAP sorgusu sonuçları görüntülüyorsa daha fazla özellik görüntülenmesi için enjeksiyon yapılması mümkündür. Örneğin yukarıdaki sorguda arama filtre kriteri kullanıcı girdisi kullanılarak oluşturuluyorsa aşağıdaki girdi:
Ali);mail,cn;
şu sorgu ifadesinin oluşmasına neden olur:
<LDAP://ldapsunucusu>;(givenName=Ali);mail,cn;);cn,telephoneNumber,department
Bu şekilde ek olarak “mail” özelliğinin bilgisi de görüntülenmiş olur. Ayrıca “cn;);cn” başlıklı boş bir kolon oluşur. LDAP sorgularında özellikler (attributes) virgülle ayrıldığından iki virgül arasındaki ifadeler özellik ismi olarak algılanır. Active Directory mevcut olmayan özellikler istendiğinde hata verir, ancak özellik ismi geçerli bir isim olup da noktalı virgülle takip edilirse bunu tolere eder. Bu yüzden enjekte edilen metnin sonunda “cn;” girilir.
Ayrıca sorgu filtresi olarak “*” işareti “wildcard” anlamına gelmekte olup “Ali” yerine “*” kullanılsaydı tüm kayıtlar görüntülenebilirdi.
Sorgu Filtresinin Değiştirilmesi
Bazı durumlarda kullanıcı girdisi tek filtre olarak değil daha kompleks bir filtrenin parçası olarak girilir. Örneğin kullanıcının sadece Türkiye’deki personelin bilgilerini izleme hakkı olması durumunda şöyle bir sorgu oluşturulabilir:
<LDAP://ldapsunucusu>;(&(givenName=Ali)(c=Turkiye);cn,telephoneNumber,department,c
Bu sorgudaki “&” işareti iki kriteri “ve” operatörü olarak iki koşulu bağlamaktadır. Bu durumda personel adı alanına “*));cn,cn;” metni girilmesi durumunda sorgu şu hali alacaktır:
<LDAP://ldapsunucusu>;(&(givenName=*));cn,cn;)(c=Turkiye);cn,telephoneNumber,department,c
Bu girdi sorgunun mantığı ülke olarak Türkiye koşulunu kaldıracak ve tüm ülkelerdeki tüm personel bilgilerini döndürülmesine neden olacaktır. Filtreden sonraki ikinci virgülden üçüncü virgüle kadar olan “cn;)(c=Turkiye);cn” boş bir alan olarak görüntülenecektir.
LDAP Enjeksiyon Açıklıklarının Tespiti
LDAP sorgularına geçersiz girdi enjekte edildiğinde genellikle anlamlı bir hata mesajı dönmez. LDAP enjeksiyon açıklığının varlığına işaret olabilecek belirti bir arama fonksiyonunun hatalı girdi sonrası HTTP 500 statü kodu gibi bir sunucu hatası döndürmesidir. Yine de aşağıdaki adımlar belli bir güvenilirlik derecesiyle LDAP enjeksiyon açıklıklarının belirlenmesi için kullanılabilir:
- Arama kriteri olarak sadece “*” karakterini girilir. Bu karakter LDAP için wildcard olmakla birlikte SQL arama kritieri olarak bu anlama gelmez. Eğer çok miktarda kayıt dönerse büyük ihtimalle LDAP kullanılıyor demektir.
- Çok sayıda kapatma parantezi girilir:
- ))))))))))
- Aşağıdaki girdilerde olduğu gibi parantez sayısı artırılarak doğru parantez sayısı hata alınmayınca tespit edilir:
- *);cn;
- *));cn;
- *)));cn;
- *))));cn;
- Girdinin sonuna yeni özellikler (attribute) girilerek ek bilgi almaya çalışılır. Dizinlerde sıklıkla kullanılan özelliklere aşağıdakiler örnek verilebilir:
- cn, c, mail, givenname, o, ou, dc, l, uid, objectclass, address, dn, sn