参考文章:https://www.anquanke.com/post/id/196238
参考文章:https://www.anquanke.com/post/id/195737
什么是LDAP
LDAP(Lightweight Directory Access Protocol),轻量目录访问协议,是一种用来查询与更新 Active Directory 的目录服务通信协议。
在AD 域服务利用 LDAP 命名路径(LDAP naming path)来表示对象在 AD 内的位置,以便用它来访问 AD 内的对象。
目录服务:是由目录服务数据库(是树状结构的数据库,和MySQL等表状结构数据库有差别)和一套访问协议组成
目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树
条目:树中的每个节点是一个条目
DN:每个条目有自己的唯一可区别的名称(DN),比如这一条uid=bob,ou=people,dc=acme,dc=org
就是一个唯一可区别的名称
如何进行LDAP的查询
这里自己就单纯的讲下在域中的查询,因为自己也了解这个
通过对应的LDAP的语法,我们可以在域中可以准确、单一的请求我们想要查询的数据
这里拿adfind来进行演示
比如先查询:adfind DC=PENTEST,DC=GOD -f"
那么就会遍历列出DC=PENTEST,DC=GOD目录下的所有条目,如下图显示,因为命令行显示有限,所以就展览在文本中进行显示了
比如查询:adfind DC=PENTEST,DC=GOD -f "(objectClass=user)"
那么就会给出对应的数据objectClass=user
下面的所有条目,ObjectClass是一个内置的数据属性,这里面的话计算机账号和用户账号都存在user
这个属性,如图中所示:
用户常见属性介绍:
displayName
objectSid
userPrincipalName
sAMAccountName
whenCreateds
pwdLastSet
Lastlogon
查询adfind DC=PENTEST,DC=GOD -f "(objectclass=user)" displayName objectsid
那么给出的数据就是对应其中条目的每个displayName 和 objectsid 的属性
什么是userAccountControl
现在继续讲关于用户的userAccountControl
属性介绍
userAccountControl
对应的介绍文章:https://support.microsoft.com/en-us/help/305144/how-to-use-useraccountcontrol-to-manipulate-user-account-properties
每个用户自身的权限都会记录在这个属性值里面
最上面的查询可以看出来每个用户都有各自的权限,举个例子比如自身的密码永不过期等等的属性,如果用上面的查询方法是不能具体的查询到的,这时候就需要用到文章中讲的位操作查询
adfind自身提供了便利的查询方法,方便了AND OR INCHAIN NEST DNWDATA
的写法
查询密码永不过期的用户
密码永不过期的flag是DONT_EXPIRE_PASSWORD 0x10000 65536
,十进制为65536
那么只需要查询语法是:adfind DC=PENTEST,DC=GOD -f "&(objectClass=user)(UserAccountControl:AND:=65536)" -bit