这里我们学习Ldapsearch的用法,主要是获取域中用户、主机、用户组、指定用户组中的用户信息
测试环境
- 域控:Windows 2016,域名:
- 测试主机:未加入域,和域控在一个网段,Kali
Ldapsearch的使用
1、Ldapsearch介绍
- 由OpenLDAP Project项目组开发维护,一个在Shell环境下进行调用ldap_search_exe库进行LDAP搜素的工具。Kali中默认安装
- LDAP和Windows AD的关系:Active Directory=LDAP服务器+LDAP应用(Windows域控)。Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)
2、验证用户是否有效:
ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地址
关于binaddn:binddn表示为“绑定专有名称”,可以理解为和LDAP服务器通信的用户名,对于Windows AD可以有两种形式:
- 用户名@域名
- 用户和用户所在LDAP目录树中的位置组合:CN=dc16,CN=Users,DC=lab,DC=local,Windows的用户一般都是以CN=用户名,CN=Users,DC=xx(按照域名的形式组合)
通过验证的话会返回No such object,因为没有指定搜索的入口
3、导出域中全部信息:
ldapsearch -D 用于验证的binddb -w '对应密码' -p ldap服务器端口 -h ldap服务器地址 -b 'dc=test,dc=lab'
这里结果信息很大,在默认域中只添加一个主机,1个新建用户的情况,产生了近6K行的文件(207K)。里面的信息应有尽有,可以重点关注的关键字:
关键字 | 备注 |
dn | 记录所对应的专有名称,可以看出该记录是否在某个OU中 |
description | 管理员在创建记录时添加的描述 |
objectClass | 指示记录类型(主机、用户、用户组) |
pwdLastSet | 最近一次密码设置的时间 |
sAMAccountName | Windows账户登录名(就是 域名\用户名 这种常见于登录框的) |
userPrincipalName | Windows登录名,类似电子右键的形式 |
memberOf | 用户记录中,用来记录用户所属用户组 |
member | 用户组记录中,用来记录组中用户 |
lastLogon | 上一次登录时间 |
lastLogonTimestamp | 上次登录时间戳 |
4、导出域中全部用户信息:导出指定部分的记录,利用过滤规则,过滤就可以,但是由于域内主机在AD中也有一个对应的机器账号,所以这里查询的结果也会包含主机。
过滤规则直接添加到命令后即可:
ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地址 -b 'dc=test,dc=lab' 'objectClass=user'
5、导出主机信息
ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地址 -b 'dc=test,dc=lab' 'objectClass=computer'
6、 导出用户组信息
ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地址 -b 'dc=test,dc=lab' 'objectClass=group'
7、导出指定用户组的信息:
修改搜索入口到指定组即可,这里以导出域管用户和域控主机为例
#域管用户
ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地址 -b 'cn=domain admins,cn=users,dc=test,dc=lab'
#域控主机
ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地址 -b 'ou=domain controllers,dc=test,dc=lab' 'objectClass=computer'
8、超大规模查询:
默认情况ldapsearch显示1000个节点,如果需要查询更多的话添加- e "pr=500/noprompt"选项
9、虽然命令行的ldapsearch操作较为复杂,但更为灵活、在流量、稳定性上也有较好的表现。同时,作为Linux下开源软件,也可以通过交叉编译直接移植到目标边界设备中,在无法进行端口转发时获取内部信息。
加油
: )