基本搜索查询是否可以进行 LDAP 注入?

Is an LDAP injection possible for a basic search query?

我试图通过尝试绕过使用 LDAP 的登录来保护登录端点。

它使用 "cn=" + username + ", dc=example, dc=com" 的搜索查询和 "(objectClass=*)" 的过滤器。

此处是否可以使用用户名进行 LDAP 注入攻击?显然,我最终会避开所有的查询和过滤器。

LDAP 注入攻击无济于事。

在您的例子中,您将用户输入注入到搜索的基本 DN(也称为 "search root")中。基本 DN 必须是有效的 DN(专有名称)。任何试图在其中注入一些聪明的值的尝试都可能会导致某些内容不是有效的 DN,并且搜索将失败(或 return 什么都没有)。即使它确实产生了有效的 DN,我假设您仍在询问用户的密码,因此他们必须知道该帐户的密码。

但是如果你想避免这种情况,只需将输入中的 , 替换为 \,。无论如何,这可能是您应该做的事情,因为如果帐户名称中有逗号,它将像在 DN 中那样被转义。不过,这是一种奇怪的做法。通常基本 DN 总是相同的,您可以使用搜索过滤器找到正确的帐户(即 (&(objectClass=user)(cn={whatever}))

如果您将用户输入注入搜索过滤器,最终用户可以更改查询,但仍然没有任何有用的事情可以做,因为查询只能读取 值。 (虽然你仍然可以通过用 </code> 和 <code> 转义 () 来防止这种情况)

LDAP 查询不像 SQL,其中注入攻击可以结束 SELECT 语句并开始另一个语句。