我们的软件从用户输入中获取用户名并将其放入 ldap-request 中,如下所示:
(& () (sAMAccountName=userinput))
它对我来说看起来很可疑,但到目前为止,我无法通过利用缺失的卫生设施来打破它。一旦我尝试任何特殊字符,我总是会得到“缺失的等号”。会不会是 com.sun.jndi.ldap.Filter.encodeFilter 正在处理这个问题?
我们的软件从用户输入中获取用户名并将其放入 ldap-request 中,如下所示:
(& () (sAMAccountName=userinput))
它对我来说看起来很可疑,但到目前为止,我无法通过利用缺失的卫生设施来打破它。一旦我尝试任何特殊字符,我总是会得到“缺失的等号”。会不会是 com.sun.jndi.ldap.Filter.encodeFilter 正在处理这个问题?
使用 LDAP 注入需要注意的一件事是用户输入末尾的通配符 ('*')。对于搜索查询来说,它是一个完全有效的字符,但是如果您期望一个唯一的用户名,那么您绝对应该在构建过滤器并将其传递之前对其进行清理。正则表达式通常用于此目的。
JavaFilter
类的代码可以在这里找到:
http://www.docjar.com/html/api/com/sun/jndi/ldap/Filter.java.html
看起来encodeSimpleFilter
函数是引发Missing 'equals'异常的原因。
如果您想检查传递给 AD 的最终 LDAP 过滤器,您可以轻松地使用 WireShark 进行未加密连接或使用来自此服务器故障线程的信息查看查询: