如何解决ldapsearch中ObjectSid=*-500无法查询管理员账户的问题?
LDAP查询管理员账户:ObjectSid通配符失效的解决方法及替代方案
问题原因
ObjectSid是LDAP中的二进制属性,并非字符串属性。直接使用ObjectSID=*500或ObjectSID=*-500这类通配符查询时,LDAP服务器会按二进制字节而非其字符串表示(如S-1-5-21-xxxx-xxxx-xxxx-500)进行匹配,导致无法匹配到目标账户。
有效解决方法
1. 利用匹配规则按SID字符串后缀查询
通过指定LDAP匹配规则,强制服务器按ObjectSid的字符串形式进行后缀匹配,命令示例:
ldapsearch -x -H ldap://dc.example.com -b "dc=example,dc=com" "(objectSid:dn:2.5.13.15:=*500)"
dn:2.5.13.15:指定使用MATCHING_RULE_SUBSTRING规则,基于属性的显示字符串(即SID的文本形式)进行子串匹配。
2. 直接匹配RID的二进制值
管理员账户的RID(相对标识符)固定为500(十六进制为0x000001F4),可通过按位与匹配规则定位:
ldapsearch -x -H ldap://dc.example.com -b "dc=example,dc=com" "(objectSid:1.2.840.113556.1.4.804:=0x000001F4)"
1.2.840.113556.1.4.804:LDAP_MATCH_RULE_BIT_AND规则,用于匹配二进制属性的特定位段(此处匹配SID的最后4字节RID)。
替代查询方法
除了通过ObjectSid,还有以下更直接的方式定位管理员账户:
查询受保护管理账户:AD中默认管理员账户会被标记
adminCount=1,命令:ldapsearch -x -H ldap://dc.example.com -b "dc=example,dc=com" "(adminCount=1)"查询默认管理员账户名:直接匹配
samAccountName(注意部分环境可能修改默认名称):ldapsearch -x -H ldap://dc.example.com -b "dc=example,dc=com" "(samAccountName=Administrator)"查询域管理员组成员:通过
memberOf匹配域管理员组:ldapsearch -x -H ldap://dc.example.com -b "dc=example,dc=com" "(memberOf=CN=Domain Admins,CN=Users,DC=example,DC=com)"
内容的提问来源于stack exchange,提问作者DrewB
相关产品推荐
相关产品推荐

