LDAP injection (Iniezione LDAP) è un attacco in grado di sfruttare le applicazioni web che costruiscono dichiarazioni LDAP in base all’input dell’utente. Quando un’applicazione non riesce a sterilizzare correttamente l’input dell’utente, è possibile modificare le dichiarazioni LDAP utilizzando un proxy locale. Ciò potrebbe provocare l’esecuzione di comandi arbitrari, come la concessione di autorizzazioni per le query non autorizzate, e la modifica dei contenuti all’interno dell’albero LDAP. Le stesse tecniche di sfruttamento avanzate disponibili in SQL Injection possono essere applicate allo stesso modo in iniezione LDAP.
Esempio 1
In una pagina con un modulo di ricerca dell’utente, il codice seguente è responsabile della cattura del valore di ingresso e serve a generare una query LDAP che verrà utilizzata nel database LDAP.
<Input type = “text” size = 20 name = “username”> Inserire il nome utente </ input>
La query LDAP è ristretta per le prestazioni e il codice sottostante per questa funzione potrebbe essere il seguente:
String ldapSearchQuery = “(cn =” + $ username + “)”;
System.out.println (ldapSearchQuery);
Se il $ userName variabile non viene convalidato, potrebbe essere possibile realizzare iniezione LDAP come segue:
⦁ Se un utente mette “*” sulla ricerca di dialogo, il sistema può restituire tutti i nomi utente sulla base LDAP
⦁ Se un utente mette “Jonys) (| (password = *))”, verrà generato il codice con sotto la password Jonys rivelando ‘(cn = Jonys) (| (password = *))

Esempio 2
Il codice vulnerabile seguente viene utilizzato in un’applicazione Web ASP che fornisce accesso con un database LDAP. On line 11, il nome utente variabile viene inizializzato e validato per verificare se non è vuoto. Poi, il contenuto di questa variabile viene utilizzata per costruire una query LDAP utilizzato da SearchFilter sulla linea 28. L’attaccante ha la possibilità specificare quale sarà interrogato sul server LDAP, e vedere il risultato sulla linea 33-41; vengono visualizzati tutti i risultati ed i loro attributi.

1. <html>
2. <body>
3. <% @ Language = VBScript%>
4. <%
5. Dim userName
6. Filtro Dim
7. Dim ldapObj
8.
9. Const LDAP_SERVER = “ldap.example”
10.
11. username = Request.QueryString (“utente”)
12.
13. se (username = “”), allora
14. Response.Write (“richiesta non valido. Si prega di specificare una valida
15. nome utente “)
16. Response.End ()
17. end if
18.
19. filter = “(uid =” + CStr (username) + “)” ‘alla ricerca della voce utente
20.
21. ‘Creare l’oggetto LDAP e impostare il DN di base
22. Set ldapObj = Server.CreateObject (“IPWorksASP.LDAP”)
23. ldapObj.ServerName = LDAP_SERVER
24. ldapObj.DN = “ou = people, dc = spilab, dc = com”
25.
26. ‘Impostazione del filtro di ricerca
27. ldapObj.SearchFilter = filtro
28.
29. ldapObj.Search
30.
31. ‘che mostra le informazioni dell’utente
32. Mentre ldapObj.NextResult = 1
33. Response.Write (“<p>”)
34.
35. Response.Write (“<b> <u> Informazioni utente per:” +
36. ldapObj.AttrValue (0) + “</ u> </ b> <br>”)
37. Per i = 0 Per ldapObj.AttrCount -1
38. Response.Write (“<b>” + ldapObj.AttrType (i) + “</ b>:” +
39. ldapObj.AttrValue (i) + “search”)
40. Avanti
41. Response.Write (“</ p>”)
42. Wend
43.%>
44. </ body>
45. </ html>

Nell’esempio precedente, abbiamo inviato il carattere * nel parametro utente che si tradurrà nella variabile filtro nel codice per essere inizializzato con (UID = *). La dichiarazione LDAP risultante farà in modo che il server restituisca alcun oggetto che contiene un attributo uid come nome utente. Un esempio:
https://www.some-site.org/index.asp?user=*