LDAP轻量目录访问协议
前言:作为LDAP的学习笔记
参考文章:https://daiker.gitbook.io/windows-protocol/ldap-pian
参考文章:https://learn.microsoft.com/zh-cn/windows/win32/secauthz/ace-strings
什么是LDAP
LDAP(Lightweight Directory Access Protocol),轻量目录访问协议,是一种用来查询与更新 Active Directory 的目录服务通信协议。
在AD 域服务利用 LDAP 命名路径(LDAP naming path)来表示对象在 AD 内的位置,以便用它来访问 AD 内的对象。
目录服务:是由目录服务数据库(是树状结构的数据库,和MySQL等表状结构数据库有差别)和一套访问协议组成
目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树
条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
比如这一条uid=bob,ou=people,dc=acme,dc=org
就是一个唯一可区别的名称,这整的一条就被称作为DN
LDAP的关键字
LDAP中关键字有这几个,DC、UID、OU、CN、SN、DN、RDN
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
一些比较有意思的字段
- msExchRequireAuthToSendTo
如果要从外部电子邮件地址向特定组发送有针对性的钓鱼邮件,则可以查询域信息以获取允许收到外部邮件的通讯组。 当 msExchRequireAuthToSendTo属性为False时,任何人都可以向该组发送邮件。
- userPassword,UnixUserPassowrd,unicodePwd,msSFU30Password
在大多数域的模式中,有3-4个字段似乎很常见,UserPassword,UnixUserPassword,unicodePwd和msSFU30Password。 在大量测试中,我们发现这些字段中的一个或多个都代表了ACTUAL密码。 虽然有时会通过转换为ASCII十进制等值来进行混淆,但可以通过“man ascii”来进行破解。
ADFind
ACL查询
查询组策略的ACL
AdFind.exe -sc getacls -b "CN=Policies,CN=System,DC=zpchcbd,DC=com"
查询当前用户的权限
AdFind.exe -sc getacls -sddlfilter ;;;;;"zpchcbd\alimaomao" -recmute