活动目录的访问
AD Explorer
LDAP( Lightweight Directory Access Protocol,轻量目录访问协议)是一种基于TCP/IP的应用层协议,用于访问和维护分布式目录信息服务。它允许用户在一个网络中查找和管理存储在目录服务中的信息。是在X.500标准基础上产生的一个简化版本(省去了x.500中许多不太常用的功能),并且使用TCP 389端口号。LDAP加密(LDAPS)端口是636。
Active Directory Explorer (AD Explorer) 是一种高级 Active Directory (AD) 查看器和编辑器。您可以使用 AD Explorer 轻松导航 AD 数据库、定义收藏夹位置、查看对象属性和 属性,而无需打开对话框、编辑权限、查看 对象的 schema,并执行可以保存的复杂搜索 并重新执行。
AD Explorer 还包括保存 AD 快照的功能 数据库进行离线查看和比较。当您加载已保存的 snapshot 中,您可以像浏览实时数据库一样导航和浏览它。 如果您有两个 AD 数据库的快照,则可以使用 AD Explorer 的 比较功能,用于查看哪些对象、属性和安全性 权限在他们之间发生更改。
AD Explorer的下载地址:https://download.sysinternals.com/files/AdExplorer.zip
解压之后。
64位的使用箭头指的那个
箭头所指的是"DC=god,DC=org",就是god.org域的域分区。
- CN=Builtin:内置了本地域组的安全组的容器。
- CN=Computers:机器用户容器,其中包含所有加入域的主机。
- OU=Domain Controllers:域控制器的容器,其中包含域中所有的域控制器。
- CN=ForeignSecurityPrincipals:包含域中所有来自域的林外部域的组中的成员。
- CN=Managed Service Accounts:托管服务账户的容器。
- CN=System:各种预配置对象的容器,包含信任对象、DNS对象和组策略对象。
- CN=Users:用户和组对象的默认容器
配置分区
配置分区(Configuration NC)存储整个域林的主要配置信息,包括有关站点、服务分区和整个活动目录结构的信息。整个域林共享一份相同的配置分区,会被复制到域中所有域的域控制器上。
其中的“CN=Configuration,DC=god,DC=org”就是配置分区。
架构分区
架构分区(Schema Naming Context, Schema NC)是Active Directory中的一个重要组成部分,它存储整个域林的架构信息,包括活动目录中所有类、对象和属性的定义数据。整个域林共享一份相同的架构分区,会被复制到林中所有域的所有域控制器中。域控制器中。
其中,“CN=Schema,CN=Configuration,.DC=god,DC=org”就是架构分区。
注意,在LDAP中,类是存在继承关系的,子类可以继承父类的所有属性,而top类是所有类的父类;并且,活动目录中的每个条目都有objectClass属性,该属性的值指向该示例对象所继承的所有类,
LDAP的按位查询
LDAP的按位查询语法:
<属性名称>:<BitFilterRule-ID>:=<十进制的位值>
其中,指的就是位查询规则对应的ID,如下所示
在 LDAP 里面,有些属性字段是位字段,这里以userAccountControl 为例介绍位查询的过程。其记录了域用户账号的很多属性信息。且userAccountControl是位属性。
- INTERDOMAIN_TRUST_ACCOUNT - 它是信任其他域的系统域信任的帐户。
- WORKSTATION_TRUST_ACCOUNT - 它是运行 Microsoft Windows NT 4.0 Workstation、Microsoft Windows NT 4.0 Server、Microsoft Windows 2000 Professional 或 Windows 2000 Server 的计算机的计算机帐户,是此域的成员。
- NOT_DELEGATED - 设置此标志时,即使服务帐户设置为受信任的 Kerberos 委派,也不会将用户的安全上下文委派给服务。
例子:账户William的userAccountControl属性只有HOMEDIR_REQUIRED和MNS_LOGON_ACCOUN两个位有值,其他位都没有,那么用户William的userAccountControl属性的值就为0x0008+0x20000,其十进制值为131080。
查询语句:(userAccountControl:1.2.840.113556.1.4.803:=131080)
语句的意思是查询域中所有userAccountControl属性设置HOMEDIR_REQUIRED位和MNS_LOGON_ACCOUN位的对象。
AdFind查询活动目录
下载地址:AD-Penetration-Testing-Tools/AdFind.zip at master · mai-lang-chai/AD-Penetration-Testing-Tools · GitHub
Adfind是一款在域环境下非常强大的信息搜集工具,允许用户在域环境下轻松搜集各种信息。它提供了大量的选项,可以优化搜索并返回相关详细信息,是内网域渗透中的一款利器。
AdFind.exe /?
语法:
AdFind.exe [switches][-b basedn][-f filter][attr list]
-b指定一个BaseDN作为查询的根;-f为LDAP过滤条件;attr list为需要显示的属性
连接选项
域内机器上执行ADFind的话,不需要连接参数,如果是域外机器执行ADFind的话,则需要指定连接参数。如下:
- -h:指定主机与端口
- -p:可以单独使用-p参数指定端口
- -u:指定用户
- -up:指定密码
过滤选项
- -b:指定要查询的根节点basedn
- -bit:指定位查询
- -f:LDAP过滤条件,指定ldap语法
显示选项
- -appver:显示adfind版本信息
- -c:只统计数量
- -csv:导出为csv格式
- -dn:只显示dn,不返回详细信息
- -s:搜索的范围,有one(当前层级)/sub(一层一层递归),默认是sub
- -sdna:非域管查询sd信息
- -recmute:如果所有属性都为空,则禁止显示DN,主要适用于sddl过滤器选项
- -t:查询超时时间,默认120秒
示例:
AdFind.exe -b dc=god,dc=org -f "objectClass=computer" name operatingSystem
语句的意思就是查询god.org域中的所有computer对象,并过滤对象的“name”和“operatingSystem”属性。
AdFind常见查询命令
AdFind提供了快捷的按位查询方式代替复杂的BitFilterRule-ID
比如:查询域中所有userAccountControl属性设置HOMEDIR_REQUIRED位和MNS_LOGON_ACCOUN位的对象。查询语句:
AdFind.exe -b dc=god,dc=org -f "(userAccountControl:AND:=131080)" -bit -dn
域用户
域用户,顾名思义,就是域环境中的用户,在域控制器中被创建,并且其所有信息都保存在活动目录中。域用户账户位于域的全局组 Domain Users 中,而计算机本地用户账户位于本地 User 组中。当计算机加入域时,全局组 Domain Users 会被添加到计算机本地的 User 组中。因此,域用户可以在域中的任何一台计算机上登录。执行以下命令:
net user /domain
可以查看域中所有的域用户。
机器用户
即机器账号、计算机账号,所有加入域的主机都会有一个机器用户,用户名为机器名加$
,如:WIN7$
、WINXP$
。在域环境中,普通域用户最多可以创建 10 个计算机账户,但是本地账号不能创建计算机账户。默认情况下,加入域的机器默认在CN=Computers
这个容器里面:
而域内的域控都在Domain Controllers这个容器里面。
当你在 Active Directory 中随便打开 Domain Computer 中的一台主机,查看其objectClass
便可以发现他是computer
类的实例,并且computer
类是user
类的子类。我们知道,域用户是user
类的实例,而computer
类的user
类的子类则说明域用户有的属性,计算用户都有。甚至我们可以说,机器用户就是一种域用户。
在域环境中**,计算机上的本地用户SYSTEM对应域中的机器账户**,在域中的用户名就是“机器名+
”。比如上图中计算机名为
R
O
O
T
−
T
V
I
862
U
B
E
H
的域用户名是
"
R
O
O
T
−
T
V
I
862
U
B
E
H
”。比如上图中计算机名为ROOT-TVI862UBEH的域用户名是"ROOT-TVI862UBEH
”。比如上图中计算机名为ROOT−TVI862UBEH的域用户名是"ROOT−TVI862UBEH"。
查找域中的所有机器用户
net group "Domain Computers" /domain
本地用户 SYSTEM 就对应于域内的机器用户,当我们拿下一台内网主机后,发现没有域内用户,这个时候我们将当前用户提升到 SYSTEM,就可以在域内充当机器用户了。但是提升到 SYSTEM 还需要利用一些提权方法。
域用户组的分类和权限
在域环境中,为了方便对用户权限进行管理,需要将具有相同权限的用户划为一组。这样,只要对这个用户组赋予一定的权限,那么该组内的用户就获得了相同的权限。
组的分类
按照用途可以分为通讯组和安全组。例如把某部门的所有员工拉进同一个通讯组,当给这个通讯组发消息时,组内的全部用户都可以收到。
安全组是用户权限的集合。对某个组赋予某种权限,在把需要这个权限的用户拉进这个组,这个用户就可以使用这个权限。
安全组权限
以作用范围分为域本地组、通用组、全局组。
- 全局组成员来自于同一域的用户账户和全局组,在林范围内可用。也就是说能够添加到全局组的成员是本域的成员或者全局组(这样就构成了组的嵌套)。如果在上海的域中创建了全局组A,那么能添加到A中的人只能是上海域中的对象或者是其他可信任域,如北京或大连的全局组。
- 域本地组成员来自林中任何域中的用户账户、全局组和通用组以及本域中的域本地组,在本域范围内可用。
- 通用组成员来自林中任何域中的用户账户、全局组和其他的通用组,在全林范围内可用。但是注意通用组的成员不是保存在各自的域控制器上,而是保存在全局编录中,当发生变化时能够全林复制。
简单记忆:
:::info
全局组 来自本域用于全林
通用组 来自全林用于全林
域本地组 来自全林用于本域
:::
因为只有域本地组专用于在本地赋予权限,所以,通常情况下,域本地组总是最后被应用。
查询所有的域本地组
AdFind.exe -b "dc=god,dc=org" -bit -f "(&(objectClass=group)(grouptype:AND:=4))" cn -dn
域本地组在活动目录中都是 Group 类的实例,而域组的作用类型是由其groupType属性决定的,该属性是一个位属性。
常见的系统内置的域本地组及其权限:
- Administrators :管理员组,该组的成员可以不受限制地访问域中资源,是域林强大的服务管理组。
- Print Operators:打印机操作员组,该组的成员可以管理网络中的打印机,还可以在本地登录和关闭域控制器
- Backup Operators:备份操作员组,该组的成员可以在域控制器中执行备份和还原操作,还可以在本地登录和关闭域控制器。
- Remote Desktop Users:远程登录组,只有该组的成员才有远程登录服务的权限
- Account Operators:账号操作员组,该组的成员可以创建和管理该域中的用户和组,还为其设置权限,也可以在本地登录域控制器。
- Server Operators:服务器操作员组,该该组的成员可以管理域服务器。
查询所有通用组:
AdFind.exe -b "dc=god,dc=org" -bit -f "(&(objectClass=group)(grouptype:AND:=8))" cn -dn
常见的系统内置的通用组及其权限:
- Enterprise Admins:组织系统管理员组,该组是域林的根域中的一个组。该组中的成员在域林的每个域中都是 Administrators 组的成员,因此对所有的域控制器都有完全控制控制权。
- Schema Admins:架构管理员组,该组是域森林的根域中的一个组。该组中的成员可以修改活动目录,如在架构分区中新增类或属性。
查询所有全局组
AdFind.exe -b "dc=god,dc=org" -bit -f "(&(objectClass=group)(grouptype:AND:=2))" cn -dn
常见的系统内置的全局组及其权限:
- Domain Admins:域管理员组,该组的成员在所有加入域的服务器上拥有完整的管理员权限。如果希望某用户成为域管理员,就可以将其添加到Domain Admins组中。该组会被添加到本域的 Administrators 组中,因此可以获得 Administrators组的所有权限。同时,该组默认被添加到域中每台计算机的本地 Administrators组中,所以会获得域中所有计算机的控制权。
- Domain Users:域用户组,该组的成员是所有的域用户。在默认情况下,任何新建的用户都是该组的成员
- Domain Computers:域成员主机组,该组的成员是域中所有的域成员主机,任何新建立的计算机账号都是该组的成员。
- Domain Controllers:域控制器组,该组的成员包含域中所有的域控制器
- Domain Guests:域访客用户组,该组的成员默认为域访客用户
- Group Policy Creator Owners:新建组策略对象组,该组的成员可以修改域的组策略
访问控制
访问控制是指 Windows 操作系统使用内置授权和访问控制技术,确定经过身份验证的用户是否具有访问资源的正确权限,以控制主体(Principal)操作(读取、写入、删除、更改等)对象(Obiect)的行为是否具有合法权限。
当经过身份验证的安全主体想访问安全对象时,Windows会为安全主体创建一个访问令牌(Access Token),其中包含验证过程返回的 SID 和本地安全策略分配给用户的用户权限列表。当安全对象被创建时,Windows会为其创建一个安全描述符(Security Descriptor)。Windows 的访问控制正是将安全主体的访问令牌中的信息与安全对象的安全描述中的访问控制项进行比较做出访问决策的。
windows访问控制模型(Access Control Model)
Windows 访问控制模型主要由访问令牌(Access Token)和安全描述符(Security Descriptor)两部分组成,分别由访问者和被访问者持有。
访问令牌
当用户登录时,windows会创建访问令牌给用户,此后该用户执行每个进程都有此访问令牌的副本。当用户与安全对象进行交互时,windows都会使用此访问令牌并确定关联的用户。
访问令牌主要包含以下信息:
- 标识用户账户的 SID(Security ID,安全标识).
- 标识用户所属的组的 SID
- 标识当前登录会话的登录 SID
- 用户或用户所属的用户组持有的特权列表
- 标识对象所有者的 SID。
- 标识对象所有者组的 SID
- 标识用户主安全组的 SID
- 用户创建安全对象而不指定安全描述符时系统使用的默认 DACL(Discretionary Access Control List,自主访问控制列表)
- 访问令牌的来源
- 访问令牌的类型,即令牌是主令牌还是模拟令牌限制 SID 的可选列表。
- 当前模拟等级。
- 其他信息
安全描述符
安全描述符(Security Descriptor)是一种与每个安全对象相关联的数据结构,其中包含与安全对象相关联的安全信息,如谁拥有对象、谁可以访问对象、以何种方式访问审查哪些类型的访问信息等。当安全对象被创建时,操作系统会为其创建一个安全描述符。安全描述符主要由 SID和 ACL(Access ControlList,访问控制列表)组成。
SID 用来标识用户账户和该用户所属的组。ACL分为 DACL和SACL两种,