什么是LDAP
LDAP(Light Directory Access Portocol),是一种基于X.500标准的轻量级目录访问协议,用来查询与更新Active Directory的目录服务通信协议。AD域服务利用LDAP命名路径(LDAP naming path)来表示对象在AD内的位置,以便用它来访问AD内的对象。
LDAP 数据的组织方式:
LDAP 名称路径如下:
标识名称(distinguished Name,DN):它是对象在 Active Directory 内的完整路径,DN 有三个属性,分别是 CN,OU,DC。
DC (Domain Component):域名组件;
CN (Common Name):通用名称,一般为用户名或计算机名;
OU (Organizational Unit):组织单位;
例如,如上用户账户,其 DN 为:
CN=张三,OU=Web前端组,OU=软件开发部,DC=moonxy,DC=com
其中 DC(Domain Component)表示 DNS 域名中的组件,例如 moonxy.com 中的 moonxy 与 com;OU为组织单位(Organization Unit);CN为通用名称(Common Name),一般为用户名或服务器名。除了DC与OU之外,其他都利用CN来表示,例如用户与计算机对象都属于CN。上述DN表示法中的 moonxy.com 为域名,软件研发部、Web前端组都是组织单位。此 DN 表示账户张三存储在 moonxy.com\软件研发部\Web前端组路径中。
相对标识名称(Relative Distinguished Name,RDN):RDN用来代表DN完整路径中的部分路径,例如上面路径中的 CN=张三与 OU=Web前端组等都是 RDN。
Base DN:LDAP 目录树的最顶部就是根,也就是所谓的 “Base DN”,如 “DC=moonxy,DC=com”。
除了 DN 与 RDN 这两个对象名称外,另外还有如下两个名称:
全局唯一标识符(Global Unique Identifier,GUID):GUID 是一个128位的数值,系统会自动为每个对象指定一个唯一的GUID。虽然可以改变对象的名称,但是其GUID永远不会改变。
用户主体名称(User Principal Name,UPN):每个用户还可以有一个比DN更短、更容易记忆的 UPN,例如上面的张三隶属于 moonxy.com,则其 UPN 可以为 zhangsan@moonxy.com。用户登录时所输入的账户名最好是 UPN,因为无论此用户的账户被移动到哪一个域,其 UPN 都不会改变,因此用户可以一直使用同一个名称来登录。
AD 与 LDAP 的关系:LDAP 是一种用来访问 AD 数据库的目录服务协议,AD DS 会通过 LDAP 名称路径来表示对象在 AD 数据库中的位置,以便用它来访问 AD 数据库内的对象。LDAP 的名称路径包括有 DN、RDN。
openLDAP(Linux),Active Directory(Microsoft)等是对 LDAP 目录访问协议的具体实现,除了实现协议的功能,还对它进行了扩展。
导出AD域用户信息
在渗透一整个域时,我们需要通过信息收集来获得域中用户信息
(1) 通过SAMR 协议查询
samr 也不算是一种专门的协议,就是一个RPC接口,我们平常使用的net user /domain就是使用samr进行查询
(2)通过ldifde.exe查询
ldifde.exe是一个基于命令行的工具,它使用LDAP Data Interchange Format (LDIF) - 一种标准化的数据格式,来表示目录服务中的数据。该工具通常用于批量处理用户账户、组织单元、权限设置等信息。
ldifde.exe的主要功能:
- 数据导出:从Active Directory导出数据到LDIF文件。
- 数据导入:将LDIF文件中的数据导入到Active Directory。
- 查询AD对象:通过特定的查询参数搜索AD对象。
数据导出
ldifde -f 输出文件名.ldif -s 服务器名称 -d "起始DN" -p 范围 -r 过滤器 -l 属性列表xxxxxxxxxx ldifde -f 输出文件名.ldif -s 服务器名称 -d "起始DN" -p 范围 -r 过滤器 -l 属性列表ldifde -i -f 输入文件名.ldif -s 服务器名称
-f
指定输出文件。-s
指定要连接的服务器。-d
指定导出数据的起始位置(DN)。-p
设置搜索范围。-r
设置过滤条件。-l
指定要导出的属性。
数据导入
ldifde -i -f 输入文件名.ldif -s 服务器名称
-i
表示导入模式。-f
指定输入文件。-s
指定要连接的服务器。
(3)使用csvde
注意:windows server版本自带csvde,而window标准版不自带csvde。而且只要是域成员都可以导出活动目录
-i
启用导入模式(默认为导出)-f filename
输入或输出文件名-s servername
要绑定到的服务器(默认为计算机域的域控制器)-v
启用详细模式-c FromDN ToDN
将目前使用的所有 FromDN 替换为 ToDN-j path
日志文件的位置-t port
端口号(默认为 389)-u
使用 Unicode 格式-h
启用 SASL 层签名和加密-?
帮助
使用命令
csvde.exe -f user.csv
就可以直接导出域中信息
如果是子域控成员,默认导出为主域控活动目录,主域控导出的数据只有其域内用户,想要导出子域控活动目录,就得使用-s 指定子域控ip。子域控的活动目录包括子域控的sid以级域内的所有账号,组以及机器名
csvde.exe -f saul_user.csv -s 10.10.10.20 //导出子域控0的活动目录
而且只要是域中的成员就可以使用csvde.exe导出任意域的活动目录
csvde.exe -f saul1_user.csv -s 10.10.10.30 //导出子域控1的活动目录
域用户
在域的domain user组中的用户称为域用户,在本地user组的用户称为本地用户。在计算机加入域时,会把domain users组添加到user组中。因此对客户机来说,两者完全是一样的。
区别只在于当其他客户机也加入域时,也添加了domain users组,因此域用户帐号还可以访问其他客户机。 用户名和密码到域控制器验证,域账户可以在任意一台加入域的电脑上登陆,多台电脑也可以同时登陆一个用户。
krbtgt账号
这个账户是提升或升级域中的第一台域控制器时自动创建的。该账号不能删除或重命名。但可以修改它的密码。KRBTGT账号的密码哈希是用来加密TGT票证的,如果被盗就产生非常严重的安全漏洞。这个账号默认是禁用的,而且要通过高级功能才会显示出来。想要了解krbtgt账号的用处,就得了解Kerberos协议。
Kerberos协议
Kerberos协议是由麻省理工学院提出的一种网络身份验证协议,提供了一种在开放的非安全网络中认证识别用户身份信息的方法。它旨在通过使用密钥加密技术为客户端/服务端应用程序提供强身份验证。
Kerberos的设计目标
通过使用对称密钥系统为客户机/服务器应用程序提供强大的第三方认证服务。
- 每个用户或应用服务器与Kerberos分享一个对称密钥。
- 允许一个用户通过交换加密消息在整个网络上与另一个用户或应用服务器互相证明身份,Kerberos给通讯双方提供对称密钥。
- 客户端用票据Ticket证明自己身份
Kerberos系统组成
(1)两个服务对象:客户(Client),服务器(Server);
(2)两类凭证:票证( TGT ),鉴别码(Authenticator);
(3)两个库: 中心数据库 ,应用程序库;
(4)两个服务器:认证服务器(AS),票据分配服务器(TGS)
Kerberos系统 工作过程
(1)认证服务交换,用户从AS取得入场劵:
① 客户向AS发出访问TGS请求(用TS1表示是新请求)
② AS向C发出应答
(2)入场劵许可服务交换,用户从TGS获取服务许可凭证:
③ C向TGS发出请求,内容包括服务器识别码、入场劵和鉴别码
④ TGS经验证,向C发出服务许可凭证
(3)客户-服务器相互认证交换,用户从服务器获取服务:
⑤ C向服务器证明自己身份(用TicketS和AuthenticatorS)
⑥ 服务器向客户证明自己身份
这个过程结束,客户C与服务器S之间就建立起了共享会话密钥,以便以后进行加密通信或交换新密钥。
信任域
信任关系分为:可传递和不可传递
**可传递的:**如果A域和B域之间的信任是可传递的,B域和C域之间的信任也是可传递的,那么A域和C域之间则会自动创建信任关系。
**可传递的:**如果A域和B域之间的信任是不可传递的,或者B域和C域之间的信任是不可传递的,那么A域和C域之间不会自动创建了信任关系。
在很多实际情况中,一个母公司下面又有多个子公司,所以就造成母公司有一个域,子公司有也有一个单独的域。母公司的域与子公司的域如何联系起来呢?我们可以在它们之间建立一种叫信任( Trust)的关系。如果母公司的帐户想要能够登录到子公司的域中,子公司的域就要对母公司的建立信任关系。当母公司域的帐户想要登录到子公司域中时,子公司域由于信任母公司的域,所以它会听从从母公司域的域控制器返回的 access key。反过来,由于母公司的域没有建立对子公司的信任,所以如果子公司的帐户想要登录到母公司的域中是不可能的。
nltest /domain_trusts 返回受信任域的列表
单向信任: 单向信任是两个域之间创建的单向信任,表示在域A和域B的单向信任:
1.域A中的用户可以访问域B中的资源
2.域B中的用户无法访问域A中的资源
单向信任可以是不可传递信任,也可以是可传递信任,这取决于信任的类型。
双向信任:域树(林)中的所有域信任都是双向的,可传递的信任,创建新的子域时,系统将在新1的子域和父域之间自动创建双向可传递信任,在双向信任中,域A信任域B,并且域B信任域A,这表示可以在两个域之间双向传递身份验证请求。
内部信任:内部信任指在同一个林中域之间的信任关系,这种信任关系是可传递的。
外部信任:外部信任指不同林之间域的信任关系,这种信任关系是单向或者双向不可传递的。
安全域的划分
划分安全域的目的是将一组安全等级相同的计算机划入同一个网段。这个网段内的计算机拥有相同的网络边界,并在网络边界上通过部署防火墙来实现对其他安全域的网络访问控制策略(NACL)
组的作用域
- 本地域组(domain local group):它主要是被用来分配对其所属域内资源的访问权限,以便可以访问该域内的资源
- 其成员可以包含任何一个域内的用户、全局组、通用组;也可以包含相同域内的本地域组;但无法包含其他域内的本地域组
- 本地域组只能够访问该域内的资源,无法访问其他不同域内的资源,换句话说在设置权限时,只能设置相同域内的本地域组的权限,无法设置其他不同域内的本地域组的权限
- 全局组(global group):它主要是用来组织用户,也就是可以将多个即将被赋予相同权限的用户账户,加入到同一个全局群组内。
- 全局组内的成员,只能够包含相同域内的用户和全局组
- 全局组可以访问任何一个域内的资源,也就是说可以在任何一个域内设置全局组的权限(这个全局组可以位于任何一个域内),以便让全局组具备权限来访问该域内的资源
- 通用组(universal group):它可以在所有域内被设置访问权限,以便访问所有域内的资源
- 通用组具备”通用范围”特性,其成员可以包含林中任何一个域内的用户、全局组、通用组。但是它无法包含任何一个域内的本地域组。
- 通用组可以访问任何一个域内的资源,也就是说可以在任何一个域内设置通用组的权限(这个通用组可以位于任何一个域内),以便让此全局组具备权限来访问该域内的资源
AD DS内置的组
内置的本地域组
这些本地域组本身已被赋予一些权限,以便让其具备管理AD DS域的能力。只要将用户或组账户加入到这些组内,这些账户也会自动具备相同的权限。
- Account Operators:其成员默认可以在容器与组织单位内新建/删除/修改用户、组与计算机账户,不过部分内置的容器例外,例如Builtin容器与Domain Controllers组织单位,同时也不允许在部分内置的容器内新建计算机账户,例如Users。他们也无法更改大部分组的成员,例如Administrators等
- Administrators:其成员具备系统管理员权限,他们对所有域控制器拥有最大的控制权限,可以执行AD DS管理工作,内置系统管理员Administrator就是此组的成员,而且无法将其从此组内删除
- Backup Operators:其成员可以通过Windows Server Backup工具来备份与还原域控制器内的文件,不论他们是否有权限访问这些文件。其成员也可以将域控制器关机。
- Guests:其成员无法永久改变其桌面环境,当他们登录时,系统会为他们建立一个临时的用户配置文件,而注销时此配置文件就会被删除,此组默认的成员为用户账户Guest与全局组Domain Guests
- Network Configuration Operators:其成员可在域控制器上执行常规的网络配置工作,例如更改IP地址,但不可以安装、删除驱动程序与服务,也不能执行与网络服务器设置有关的工作,例如DNS与DHCP服务器的配置
- Performance Monitor Users:其成员可监视域控制器的工作性能
- Pre-Windows 2000 Compatible Access:此组主要是为了与Windows NT 4.0(或更旧的系统)兼容,其成员可以读取AD DS域内的所有用户和组账户。其默认的成员为特殊组Authenticed Users。请仅在用户的计算机时Windows NT 4.0或更旧的系统时,才将用户加入到此组内
- Print Operators:其成员可以管理域控制器上的打印机,也可以将 域控制器关机
- Remote Desktop Users:其成员可以从远程计算机通过远程桌面来登录
- Server Operators:其成员可以备份与还原域控制器内的文件;锁定与解锁域控制器;将域控制器上的硬盘格式化;更改域控制器的系统时间;将域控制器关机等。
- Users:其成员仅拥有一些基本权限,例如执行应用程序,但是他们不能修改操作系统的设置,不能更改其他用户的数据、不能将服务器关机。此组默认的成员为全局组Domain Users
内置的全局组
AD DS内置的全局组本身并没有任何的权限,但是可以将其加入到具备权限的本地域组,或另外直接给此全局组分配权限。这些内置全局组时位于Users容器内
- Domain Admins:域成员计算机会自动将此组加入到其本地组Administrators内,因此Domain Admins组内的每一个成员,在域内的每一台计算机上都具备系统管理员权限。此组默认的成员为域用户Administrator
- Domain Computers:所有的域成员计算机(域控制器除外)都会被自动加入到此组内。
- Domain Controllers:域内的所有域控制器都会被自动加入到此组内
- Domain Users:域成员计算机会自动将此组加入到其本地组Users内,因此Domain Users内的用户将享有本地组Users所拥有的权限,例如拥有允许本地登录的权限。此组默认的成员为域用户Administrator,而以后新建的域用户账户都自动会隶属于此组
- Domain Guests:域成员计算机会自动将此组加入到本地组Guests内。此组默认的成员为域用户账户Guests
内置的通用组
- Enterprise Admins:此组只存在于林根域,其成员具备管理林内的所有域。此组默认的成员为林根域内的用户Administrator
- Schema Admins:此组只存在于林根域,其成员具备管理架构(Schema)的权限。此组默认的成员为林根域内的用户Administrator
参考链接:
域渗透入门-LDAP的粗略认识 - 壹個人坐在角落 - 博客园 (cnblogs.com)
AD 域服务简介(一)- 基于 LDAP 的 AD 域服务器搭建及其使用 - 沐小悠 - 博客园 (cnblogs.com)
内网渗透之初识域渗透 - 只言 - 博客园 (cnblogs.com)