获取域内信息工具哪家强 | 三款常用工具横向对比
2021-07-06 12:48:58 Author: mp.weixin.qq.com(查看原文) 阅读量:54 收藏

文章来源|MS08067 内网安全知识星球

本文作者:掉到鱼缸里的猫(Ms08067内网安全小组成员)

  1. 情景

在测试过程中通过漏洞获取了边界节点的控制权,但该主机不在域中,或者不是windows主机(Linux 服务器、边界网络设备),进一步测试发现,该主机和域控主机并没有隔离,掌握一定的域用户信息, 同时可以通过该主机进行流量转发。 

本文将介绍利用 ldapsearch 工具,通过端口转发方式,获取域内用户信息的方法,主要是获取域中用 户、主机、用户组、指定用户组中的用户信息,以及超大规模(10W)用户目录的情况(极端情况,估计这辈子都遇不到),并与两个在windows环境下常用工具 ADExplorer.exe 、 LdapBrowser.exe 进 行对比。

测试环境: 

域控主机:Windows Server 2016,10W自建用户组、10W自建用户,域名为lab.local

边界主机:Ubuntu 20.04,利用 rinetd 进行端口转发TCP 389端口 

测试软件:ldapsearch (Kali),对比软件 ADExplorer.exe 、 LdapBrowser.exe

2. ldapsearch的使用

ldapsearch 介绍:由OpenLDAP Project项目组开发维护的,一个在shell环境下进行调用 ldap_search_ext库进行LDAP搜索的工具。(kali中默认安装) 

LDAP和Windows AD的关系:Active Directory = LDAP服务器+LDAP应用(Windows域 控)。Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己 的一个具体应用(域控)

  1. 验证用户是否有效:

ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地 址 1

通过验证的话会返回 No such object ,因为没有指定搜索的入口

关于“binddn:binddn表示为“绑定专有名称”,可以理解为和LDAP服务器通信的用户名,对 于windows AD可以有两种形式: 

  1. 截图中的用法:用户名@域名

  2. 用户和用户所在LDAP目录树中的位置组合:CN=dc16,CN=Users,DC=lab,DC=local windows的用户一般都是以 CN=用户名,CN=Users,DC=xx(按照域名的形式组合

2. 导出域中全部信息:

ldapsearch -D 用于验证的binddn -w '对应密码' -p ldap服务器端口 -h ldap服务器地 址 -b 'dc=lab,dc=local' 

这个信息会很大,在默认域中只添加一个主机、2新建个用户的情况下,会产生5K+行的文件 (177K)。

里面的信息应有尽有,可以重点关注的关键字:

3. 导出域中全部用户信息:

导出指定部分的记录,利用过滤规则,过滤 objectClass=User 就可以,但是由于域内主机在AD 中也有一个对应的机器账号,所以这里查询的结果也会包含主机。过滤规则直接添加到命令后即可:

ldapsearch -D [email protected] -w '!we4Zsdc' -p ldap服务器端口 -h ldap服务器地 址 -b 'dc=lab,dc=local' 'objectClass=user'

查询出来要小很多

4. 导出主机信息:

ldapsearch -D '[email protected]' -w '!we4Zsdc' -p 8866 -h 192.168.146.141'

-b dc=lab,dc=local' 'objectClass=computer'

5. 导出用户组信息:

ldapsearch -D '[email protected]' -w '!we4Zsdc' -p 8866 -h 192.168.146.141 - b 'dc=lab,dc=local' 'objectClass=group'

如果想看起来简单点:

ldapsearch -D '[email protected]' -w '!we4Zsdc' -p 8866 -h 192.168.146.141-b

dc=lab,dc=local' 'objectClass=group'|egrep 'cn:|member:'

6. 导出指定用户组的信息:修改搜索入口到指定组即可,这里以导出域管用户和域控主机为例

# 域管用户 ldapsearch -D '[email protected]' -w '!we4Zsdc' -p 8866 -h 192.168.146.141 - b 'CN=Domain Admins,CN=Users,DC=lab,DC=local' # 域控主机 ldapsearch -D '[email protected]' -w '!we4Zsdc' -p 8866 -h 192.168.146.141 - b 'OU=Domain Controllers,DC=lab,DC=local' 'objectClass=computer'

7. 超大规模查询:默认情况下 ldapsearch 显示1000个节点,如果需要查询更多的话添加 -E "pr=500/noprompt" 选 项。

 在极限测试时,只有 LdapBrowser.exe 挂掉了:

3. 关于日志和流量

3.1 日志方面

三个软件都是可以在安全日志中看到选择的用户进行身份验证时的日志,可以看到登录的账户和来源 IP。

3.2 流量方面 

流量方面的话 ldapsearch 具有较大的优势:

4. 总结

经过测试,不难看出,虽然命令行的 ldapsearch 操作较为复杂,但更为灵活、在流量和稳定性上也有 较好的表现,作为在Linux下运行的开源软件,也可以通过交叉编译直接移植到目标边界设备中,在无法 进行端口转发的情况下获取内部域信息。

关于UserPrincipalName 和 SamAccountName 

参考链接

 UserPrincipalName: 

1.用户登录名格式:[email protected]

2.是基于Internet标准RFC 822的用户Internet样式登录名; 

3.在目录林中的所有安全主体对象中应该是唯一的; 

4.UPN是可选的,在创建用户帐户时可指定也可不单独指定;

SamAccountName: 

1.与早期版本的Windows(pre-windows 2000)一起使用;

 2.用户登录名格式:azureyun\xiaowen

3.不能超过20个字符;

 4.在域中的所有安全主体对象中是唯一的; 

关于lastLogon和lastLogonTimestamp

参考链接

 1.lastLogon 属性实时更新用户登录时间,但它不会从一个DC复制到另一个DC。

2.lastLogonTimestamp 属性会从一个DC复制到另一个DC。因此,不论你查询域中任何一个 DC,都会得到相同的结果。但是lastLogonTimestamp属性不反映确切的“最后登录时间”。

扫描下方二维码加入星球学习

加入后邀请你进入内部微信群,内部微信群永久有效!

 

 

和5000+位同学一起加入星球学习


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247494252&idx=1&sn=df3f6e32e623685d055a3702f63e9331&chksm=fc3c536dcb4bda7ba4b32048adece04102346c4c8432bb52b1d9ef236128402e8c1649d805c5#rd
如有侵权请联系:admin#unsafe.sh