我们的软件从用户输入中获取用户名,并将其放入ldap请求中,如下所示:
(& () (sAMAccountName=userinput))
它对我来说看起来很腥,但到目前为止,我无法利用缺少的卫生设施打破它。一旦我尝试任何特殊字符,我总是会“错过平等”。是不是com.sun.jndi.ldap.Filter.encodeFilter正在处理这个问题?
答案 0 :(得分:1)
注意LDAP注入的一件事是用户输入末尾的通配符('*')。它对于搜索查询来说是一个非常有效的字符,但是如果您期望一个唯一的用户名,那么在构建过滤器并将其传递之前,您一定要清理它。正则表达式通常用于此目的。
可以在此处找到Java Filter
类的代码:
http://www.docjar.com/html/api/com/sun/jndi/ldap/Filter.java.html
看起来encodeSimpleFilter
函数会抛出 Missing'等于'异常。
如果要检查传递给AD的最终LDAP过滤器,可以轻松地将WireShark用于未加密的连接,或者使用来自此serverfault线程的信息查看查询: