谢公子学安全
Ldapsearch的使用
ldapsearch是类unix下一款用于活动目录信息查询的工具,Kali中自带ldapsearch。以下演示在Kali系统下通过ldapsearch这款工具对活动目录数据进行查询。
参数
执行如下命令即可查看ldapsearch的一些参数:
常见的几个参数如下:
使用
以下是在Kali系统环境下演示ldapsearch工具的使用。
一
连接选项
下面这几个是连接选项,也就是在连接的时候指定的参数。由于使用ldapsearch是在域外使用,因此需要指定域控制器,并且提供一个有效的域账号密码。如下:
-
-H:ldapuri,格式为 ldap://机器名或者IP:端口号,不能与-h和-p同时使用
-
-h:LDAP服务器IP或者可解析的hostname,与-p可结合使用,不能与-H同时使用
-
-p:LDAP服务器端口号,与 -h 可结合使用,不能与-H同时使用。不指定时默认为389端口
-
-D:指定用户
-
-w:指定密码
-
-W:不输入密码,会交互式的提示用户输入密码,与-w二者选一
可以使用-H参数或-h参数指定域控,-p参数指定端口,-D参数指定域用户名、-w参数或-W参数指定密码。如下命令:
#使用hack账号密码-H参数连接域控10.211.55.4的389端口
ldapsearch -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234
#使用hack账号密码-h参数连接域控10.211.55.4 -p指定389端口
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234
#使用hack账号密码-h参数连接域控10.211.55.4 -p指定389端口,此时不输入密码,在交互式中输入密码
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -W
如图所示,使用-H参数指定域控及端口进行连接,并且提供一个有效凭据,凭据正确与否,返回结果不一致。
如图所示,使用-h参数指定域控,使用-p参数指定端口进行连接,并且提供一个有效凭据,凭据正确与否,返回结果不一致。
如图所示,使用-h参数指定域控,使用-p参数指定端口进行连接,回车后交互式输入密码。
二
过滤选项
下面这个是过滤参数,也就是进行查询的时候需要过滤的一些条件:
-
-b:指定要查询的根节点basedn,以及过滤的语法
例如如下命令:
#查找指定basedn的信息
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Administrator,CN=Users,DC=xie,DC=com"
#查找指定basedn的信息,并且过滤出name=administrator的条目
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Users,DC=xie,DC=com" "name=administrator"
如图所示,查找指定的basedn的信息,也就是查找administrator的信息。
如图所示,查找指定的basedn的信息,并且过滤出name=administrator的条目。可以看到和好上面搜索的结果一直。
三
显示选项
默认情况下,查找的结果会显示对象的所有属性,如果想只显示指定属性的话,在末尾加上属性名即可。也可以使用-o参数将结果导出在文件中。如下命令:
#查找指定administrator用户的所有信息
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Administrator,CN=Users,DC=xie,DC=com"
#查找指定administrator用户的dn属性
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Administrator,CN=Users,DC=xie,DC=com" dn
#查找指定administrator用户的dn属性,使用grep过滤,结果更直观
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Administrator,CN=Users,DC=xie,DC=com" | grep dn
#查找指定administrator用户的所有信息,并将结果导出在指定LDIF格式文件中
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Administrator,CN=Users,DC=xie,DC=com" -o ldif-wrap=no > administrator.ldif
#接着使用adoffline.py脚本将LDIF格式文件转换为sqlite格式文件
python adoffline.py administrator.ldif
如图所示,查询指定administrator用户的所有信息。
如图所示,查询指定administrator用户的dn属性。可以看到即使这样,查询出的结果还不是很直观。
因此我们可以使用grep来过滤输出结果,只显示dn。如图3-95所示,使用grep过滤结果中的dn,结果很直观
如图所示,查询指定administrator用户的所有信息,并导出成LDIF 格式的administrator.ldif文件,接着使用adoffline.py将其转为sqlite格式文件。可以看到最后生成为/tmp/tmpOWK1Tm.20210929183345.ad-ldap.db文件。
最后便可以使用navicat打开sqlite格式文件了。如图所示,使用navicat打开tmpOWK1Tm.20210929183345.ad-ldap.db文件,可以很直观的看到administrator用户的一些属性信息。
查询示例
以下演示一些在实战中经常用到的一些查询语法。
一
连接选项
下面这几个是与机器相关的查询命令。
(1) 查询域中所有域控
以下命令是查询域中所有的域控。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "OU=Domain Controllers,DC=xie,DC=com" "objectcategory=computer" | grep dn
如图所示,查询到了域内所有的域控。
(2) 查询域中所有机器
以下命令是查询域中所有的机器,包括域控。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "objectcategory=computer" |grep dn
如图所示,查询到了域内所有的机器,包括域控AD01。
(3) 查询指定机器详细信息
以下命令是查询域中机器的详细信息。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectcategory=computer)(name=mail))"
如图所示,查询指定mail机器的详细信息。
二
用户相关
下面这几个是与用户相关的查询命令。
(1) 查询域管理员
以下命令是查询域管理员组中含有哪些用户。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Domain Admins,CN=Users,DC=xie,DC=com" | grep member
如图所示,可以看到查询到域管理员组中有admin和administrator两个用户。
(2) 查询域内所有用户
以下命令是查询域内所有用户。
ldapsearch -h 10.211.55.4 -p 389 -D "[email protected]" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectCategory=person)(objectClass=user))" | grep dn
(3) 查询指定域用户
以下命令是查询域内指定用户test。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectCategory=person)(objectClass=user)(name=test))"
如图所示,可以看到查询到域内指定用户test的信息。
(4) 查询指定域用户的sid
以下命令是查询域内指定test用户的sid值。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectCategory=person)(objectClass=user)(name=test))" |grep objectsid
如图所示,可以看到查询出指定test用户的sid值。
(5) 查询指定sid对应的用户
以下命令是查询域内指定sid值对应的用户。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectCategory=person)(objectClass=user)(objectSid=S-1-5-21-1313979556-3624129433-4055459191-1146))" |grep dn
如图所示,可以看到查询出指定sid值对应的用户为test。
(6) 查询指定域用户属于哪些组
以下命令是查询指定域用户administrator属于哪些组。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectCategory=person)(objectClass=user)(name=administrator))" |grep memberOf
如图所示,可以看到查询出指定administrator用户的所属组。
(7) 查询域内开启”Do not require Kerberos preauthentication”选项的用户
如下命令是查询域内开启了不需要域认证的用户。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" |grep dn
如图所示,可以看到查询到hack用户开启了不需要域认证。
(8) 查询受保护的用户
如下命令是查询域内受保护的用户。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(objectcategory=person)(samaccountname=*)(admincount=1))" |grep dn
如图所示,查询到四个用户在域内受保护。
三
组相关
下面这几个是与组相关的查询命令。
(1) 查询域内所有的全局组
以下命令是查询域内所有的全局组。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(grouptype=-2147483646)" |grep dn
如图所示,可以看到查询出域内所有的全局组。
(2) 查询域内所有通用组
以下命令是查询域内所有的通用组。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(grouptype=-2147483640)" | grep dn
如图所示,可以看到查询出域内所有的通用组。
(3) 查询域内所有的本地域组
以下命令是查询域内所有的本地域组。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(|(grouptype=-2147483644)(grouptype=-2147483643))" |grep dn
如图所示,可以看到查询出域内所有的本地域组。
(4) 查询指定组含有哪些对象
以下命令是查询指定组含有哪些对象。
ldapsearch -h 10.211.55.4 -p 389 -D "hack@xie.com" -w P@ss1234 -b "CN=Domain Admins,CN=Users,DC=xie,DC=com" member
如图所示,可以看到查询出域管理员组Domain Admins内含有admin和administrator用户。
四
委派相关
下面这几个是与委派相关的查询命令。
(1) 非约束性委派
如下命令是查询配置了非约束性委派的主机和服务帐户。
#查询域中配置非约束委派的主机
ldapsearch -x -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" | grep dn
#查询域中配置非约束委派的服务账户
ldapsearch -x -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" | grep dn
如图所示,可以看到查询出配置了非约束性委派的主机和服务帐户。
(2) 查询约束性委派
如下命令是查询配置了约束性委派的主机和服务帐户。
#查询域中配置了约束性委派的主机,并可以看到被委派的SPN
ldapsearch -x -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" | grep -e dn -e msDS-AllowedToDelegateTo
#查询域中配置了约束性委派的服务账户,并可以看到被委派的SPN
ldapsearch -x -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" | grep -e dn -e msDS-AllowedToDelegateTo
如图所示,可以看到查询出配置了约束性委派的主机和服务帐户。
(3) 查询基于资源的约束性委派
如下命令是查询配置了基于资源的约束性委派的主机和服务帐户。
#查询域中配置基于资源的约束性委派的主机
ldapsearch -x -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn
#查询域中配置基于资源的约束性委派的服务账户
ldapsearch -x -H ldap://10.211.55.4:389 -D "hack@xie.com" -w P@ss1234 -b "DC=xie,DC=com" "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn
如图所示,可以看到查询出配置了基于资源的约束性委派的主机和服务帐户。
非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。如果你想一起学习AD域安全攻防的话,可以加入下面的知识星球一起学习交流。
原文始发于微信公众号(谢公子学安全):Ldapsearch的使用
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论