LDAP篇

LDAP篇

简介

LDAP

1.LDAP是轻量目录访问协议,是用来访问目录数据库的协议
2.目录数据库是有目录服务数据库何一套访问协议组成
3.目录数据库有以下特点
	1.它是树状结构组织数据,雷素与文件目录
	2.是为了查询,浏览,搜索而优化的数据库,写的能力较差,不支持事务处理,回滚等功能
4.类和继承
	1.域内每个条目都是类的实例。而类是一组属性的集合
	2.类是可继承的。子类继承父类的所有属性,Top类是所有类的父类
	类有三种类型:
		1.结构类
			结构类规定了对象实例的基本属性,每个条目属于且仅属于一个结构型对象类
		2.抽象类
			抽象类型是结构类或其他抽象类的父类,它将对象属性中公共部分组织在一起,没有实例
		3.辅助类
			辅助类型规定了对象实体的扩展属性

AD

Naming Context

Application Partitions

搜索AD

查询目录指定的两个要素

  • BaseDN

  • 过滤规则

BaseDN

过滤规则

搜索

组和OU

组分为通讯组和安全组,但是重要的还是安全组

安全组是权限的集合,我们可以对某个组配置权限,然后把对于用户拉进该组就拥有了该权限

安全组分为:

  • 全局组 (Global group)

  • 通用组(Universal group)

  • 域本地组(Domain Local group)

组类型
可以授予权限
可包含
可包含于
成员是否在全局编录复制

全局组

在同一林中或信任域或林中的任何域上

来自同一域的帐户。 来自同一域的其他全局组

来自同一林中任何域的通用组。 来自同一域的其他全局组。 来自同一林中任何域或任何信任域的域本地组。

通用组

在同一林或信任林中的任何域上

来自同一林中任何域的帐户。 来自同一林中任何域的全局组。 来自同一林中任何域的其他通用组。

同一林中的其他通用组。 在同一个林或信任林中域本地组。

域本地组

在同一个域中

来自任何域或任何受信任域的帐户。 来自任何域或任何受信任域的全局组。 来自同一林中任何域的通用组。 来自同一域的其他域本地组。

来自同一域的其他域本地组。

常见域本地组

  • Administrator:管理员组,该组可以不受限制的访问域中资源,是域林强大的服务管理组

  • Print Operators:打印机操作组员,该组可以管理网络中的打印机,还可以在本地登录和关闭域控制器

  • Backup Operators:备份操作组,该组可以在域控制器中国执行备份和还原,还可以在本地登录和关闭域控制器

  • Remote Desktop Users:远程登录组,只有该组成员才可以有远程登录服务权限

  • Account Operators:服务器操作组员,该组的成员可以管理域服务器

adfind.exe -b "dc=ice,dc=com" -bit -f "(&(objectClass=group)(grouptype:AND:=4))" cn -dn来查找域本地组

常见通用组

  • Enterprise Admins:组织系统管理员组,是域林中的根域的一个组,该组的成员在每个域中都是Administrator组的成员,因此对所有域控制器都有完全控制权限

  • Schema Admins:架构管理员组,,是域森林的根域中的一个组,该组可以修改活动目录

adfind.exe -b "dc=ice,dc=com" -bit -f "(&(objectClass=group)(grouptype:AND:=8))" cn -dn来查找通用组

常见全局组

  • Domain Admins:域管理员组,该组成员在所有加入域的服务器上拥有完整的管理员权限,该组会默认加入域中每台计算机的本地Administrator组中,所有获得所有计算机的控制权

  • Domain Users:域用户组,默认情况所有新建域用户都是该组成员

  • Domain Computers:域成员主机组,该组成员包含域中所有主机,任何新建的计算机账户都是该组成员

  • Domaim Controllers:域控制器组,该组成员包含域中所有域控制器

  • Domain Guests:域访客用户组,该组的成员默认为域访客用户

  • Group Policy Creator Owners:薛佳凝组策略对象组,该主机成员可以修改域的组策略

adfind.exe -b "dc=ice,dc=com" -bit -f "(&(objectClass=group)(grouptype:AND:=2))" cn -dn来查找通用组

AGDLP策略

A表示用户账号,Account

G表示全局组,Global group

U表示通用组,Universal Group

L表示本地组, local group

DL表示域本地组,Domain local group

P表示资源权限,Resource Permissions

常见的权限划分方式

  • AGP,将用户账户添加到全局组,然后赋予全局组权限

  • AGLP,将用户账户添加到全局组,将全局组添加到本地组, 然后赋予本地组权限

  • ADLP 将用户账户添加到域本地组,然后赋予域本地组权限

  • AGDLP,将用户账户添加到全局组,将全局组添加到域本地组, 然后赋予域本地组权限

  • AGUDLP,将用户账户添加到全局组,将全局组添加到通用组,将通用组添加到域本地组, 然后赋予域本地组权限

OU

组织单位(Organization Unit),简称OU,是一个容器对象,将域中的对象组织成逻辑组,帮助网络管理员简化管理组。组织单位包含下列类型的对象:用户,计算机,工作组,打印机,安全策略,其他组织单位等。可以在组织单位基础上部署组策略,统一管理组织单位中的域对象

组是权限的集合,OU是管理对象的集合,两者不同

组织单位可以添加组策略之后还可以在组织单位里面新建用户,组,计算机等等

域用户

域用户

查询域用户

可以根据上面的userAccountControl字段查询不同的用户例如查询密码不过期的用户:

Adfind.exe -b dc=ice,dc=com -f "(userAccountControl:AND:=65536)" -bit -dn

查询设置了约束委派的用户:

Adfind.exe -b dc=ice,dc=com -f "(userAccountControl:AND:=524288)" -bit -dn

查询机器用户

查询域内所有机器:

Adfind.exe -b dc=ice,dc=com -f "(objectclass=Computer)" -dn

本地账户

管理员(Administrators)

默认本地系统账户(SYSTEM)

网络服务账户

本地服务账户

TrustedInstaller

其他搜索用户的命令

域权限

Windows访问控制模型

主要有两部分组成

  • 访问令牌,包含用户的标识(User SID,Group SIDS),特权列表

  • 安全描述符,包含被访问的安全对象的相关安全信息,安全描述符可以包含以下安全信息:

文件访问权限

使用icacls查看的文件权限有下面几种

简单权限序列 (基本权限) :

  • F - 完全访问权限

  • M- 修改访问权限

  • RX - 读取和执行访问权限

  • R - 只读访问权限

  • W - 仅写访问权限

特定权限的括号中的逗号分隔列表 (高级权限) :

  • D - 删除

  • RC - 读取控制 (读取权限)

  • WDAC - 写入 DAC (更改权限)

  • WO - 写入所有者 (获取所有权)

  • S - 同步

  • AS - 访问系统安全性

  • MA - 允许的最大数量

  • GR - 泛型读取

  • GW - 泛型写入

  • GE - 泛型执行

  • GA - 全部通用

  • RD - 读取数据/列表目录

  • WD - 写入数据/添加文件

  • AD - 追加数据/添加子目录

  • REA - 读取扩展属性

  • WEA - 编写扩展属性

  • X - 执行/遍历

  • DC - 删除子级

  • RA - 读取属性

  • WA - 写入属性

icacls命令行参考arrow-up-right

访问令牌

令牌的组成主要有如下部分:

  • TokenID (标识 token 的唯一ID)

  • Privileges (当前 token 的权限,具体可查看官方文档)

  • UserAndGroups (当前用户及所属的组,实际是一个 SID 数组)

  • RestrictedSids (如果该值不为空,则表示令牌属于受限令牌,同样是一个 SID 数组)

  • TokenType (当前令牌的类型)

  • ImpersonationLevel (模拟令牌的等级)

令牌创建:

令牌模拟等级

模拟等级通过如下所示的 SECURITY_IMPERSONATION_LEVEL 枚举表示

模拟级别
说明

SecurityAnonymous

无法获取有关客户端的标识信息且无法模拟客户端;

SecurityIdentification

可以获取有关客户端的信息(如安全标识符和特权)但是无法模拟客户端

SecurityImpersonation

可以在本地模拟客户端但无法在远程系统上模拟客户端

SecurityDelegation

可以在本地和远程系统上模拟客户端

三个通过用户身份创建进程的函数:

函数
需要特权
输入

CreateProcessWithLogon

null

域/用户名/密码

CreateProcessWithToken

SeImpersonatePrivilege

Primary令牌

CreateProcessAsUser

SeAssignPrimaryTokenPrivilege和SeIncreaseQuotaPrivilege

Primary令牌

从这三个 Win API 中我们可以很容易的发现,当拥有 SeAssignPrimaryTokenPrivilege和或者SeImpersonatePrivilege权限时,我们可以通过模拟 Primary 令牌的方式来创建新进程从而提升权限,换句话说只有当令牌级别具有 SecurityImpersonation和 SecurityDelegation级别的时候才可以进行模拟,因此如果想通过模拟令牌的方式来进行提权,一个非常重要的前提就是用户具有 SeImpersonatePrivilege权限。

SID

安全标识符(Security Identifiers,SID),是标识用户、组和计算机帐户的唯一的号码。每个账户都有一个由权威机构(例如 Windows 域控制器)颁发的唯一 SID,并存储在安全数据库中。每次用户登录时,系统都会从数据库中检索该用户的 SID,并将其放在该用户的访问令牌中。在与 Windows 安全性相关的所有后续交互中,系统使用访问令牌中的 SID 识别用户。当 SID 用作用户或组的唯一标识符时,就不能再使用它来标识另一个用户或组

常见SID列表

  • S-1-5-18 (LocalSystem)

  • S-1-5-19 (LocalService)

  • S-1-5-20 (NetworkService)

  • S-1-5-32-544 (Administrators)

  • S-1-5-32-545 (Users)

  • S-1-5-32-550 (PrintOperators)

常见sidarrow-up-right

SID简化:

第一位 S 是默认位,第二位 R 代表 SID 版本号,第三位 A 代表主标识值,后面的SA 则代表子标识值,其中 SA1 到 SAn-1代表域相关的标识值, SAn (最后一个)则是 RID(relative identifier),代表相对标识值

针对 S-1-5-21-1004336348-1177238915-682003330-512进行解析,可以知道

  • SID 的版本号是 1

  • 主标识值是 5,代表 NT 权限

  • 域相关的子标识值是 21-1004336348-1177238915-682003330

  • RID 是 512,代表 DomainAdmins

可以使用 windbg 来查看进程的 Token,Token 中包含了用户 SID 以及所属组SID的信息

ACL

ACL主要作用:

1.访问权限控制 --能不能访问安全对象

2.日志记录功能 --访问是否成功

ACL包括DACL和SACL

ACE

当访问文件时系统做出判断

  1. 如果没有 DACL,系统将允许访问

  2. 如果存在 DACL,但没有 ACE,系统将拒绝所有访问

  3. 如果存在 DACL,也存在 ACE,那么会按照每个 ACE 指定允许或拒绝

windbg 中启动内核调试,使用!sd 可以查看安全描述符信息

可以看到该 DACL 存在3个 ACE,ACE 的类型为 ACCESS_ALLOWED_ACE_TYPE,Mask 是权限掩码,用来指定对应的权限

可利用权限

对某些属性的WriteProperty ,有以下属性

  • member(bf9679c0-0de6-11d0-a285-00aa003049e2)

  • servicePrincipalName(28630EBB-41D5-11D1-A9C1-0000F80367C1)

  • GPC-File-Sys-Path(f30e3bc1-9ff0-11d1-b603-0000f80367c1)

扩展权限有

  • User-Force-Change-Password(0299570-246d-11d0-a768-00aa006e0529)

    可以在不知道当前目标用户的密码的情况下更改目标用户的密码

  • DS-Replication-Get-Changes(1131f6aa-9c07-11d1-f79f-00c04fc2dcd2) 和 DS-Replication-Get-Changes-All(1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)

    对域对象具有这两个扩展权限的用户具备dcsync 权限

通用权限有

  • WriteDacl

  • AllExtendedRights

  • WriteOwner

  • GenericWrite

  • GenericAll

  • Full Control

AddMembers

可以将任意用户,组或计算机添加到目标组

servicePrincipalName

将一个对象写入spn

GPC-File-Sys-Path

这个是一个跟组策略有关的属性,GPC-File-Sys-Path这个属性,这个属性将GPO与GPT链接起来,GPT是组策略具体的策略配置信息,其位于域控制器的SYSVOL共享目录下,如果我们能够控制GPC-File-Sys-Path的话,可以将ad活动目录里面的gpo指向我们自定义的GPT,而GPT里面包含的是组策略具体的策略配置信息,也就是说我们可以修改组策略配置信息的内容

User-Force-Change-Password

可以在不知道当前目标用户的密码的情况下更改目标用户的密码

DS-Replication-Get-Changes

对域对象具有这两个扩展权限的用户具备dcsync 权限

WriteDACL

将新ACE写入目标对象的DACL的功能。可以向目标对象DACL写入新的ACE,从而使攻击者可以“完全控制”目标对象

AllExtendedRights

所有扩展权限。比如,User-Force-Change-Password权限

WriteOwner

这个权限这个修改Owner为自己

而Owner 默认拥有WriteDacl 和 RIGHT_READ_CONTROL权限

GenericWrite

可以修改所有参数,因此包括对某些属性的WriteProperty,比如member。

GenericAll

这包括writeDacl和WriteOwner,WRITE_PROPERTY等权限

Full Control

这个权限就具备以上所有的权限

AdminSDHolder

AdminSDHolder是位于Active Directory中的系统分区(CN=AdminSDHolder,CN=System,DC=test,DC=loca)中的一个对象

这个的作用就是,他会作为域内某些特权组的安全模版。所谓安全模版,就是说有一个进程(SDProp),每隔60分钟运行一次,将这个对象的ACL复制到某些特权组成员的对象的ACL里面去**(可用做后门)**。 这些特权组和用户默认有 Account Operators Administrator Administrators Backup Operators Domain Admins Domain Controllers Enterprise Admins Krbtgt Print Operators Read-only Domain Controllers Replicator Schema Admins Server Operators

默认这个时间是60分钟是可以更改的,通过更改注册表项

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\AdminSDProtectFrequency

属性adminCount在Active Directory中标记特权组和用户,对于特权组和用户,该属性将设置为1。一旦用户从特权组中删除,他们仍将adminCount值保持为1,但Active Directory不再将其视为受保护的对象。因此通过admincount=1匹配到的所有对象(adfind -f "admincount=1" -dn),不一定都是特权组

UAC

UAC

需要UAC的授权才能进行的操作

UAC设置

组策略

组策略可以控制用户帐户和计算机帐户的工作环境。他提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。有本机组策略和域的组策略。本机组策略用于计算机管理员统一管理本机以及所有用户,域内的组策略用于域管统一管理域内的所有计算机以及域用户,通过运行gpedit.msc打开本地组策略,gpmc.msc打开域组策略。

组策略包括但不限于:

  • 账户策略的配置,如账户的密码长度,复杂程度,使用期限,账户锁定策略等等

  • 脚本的配置:如登录与注销,启动与关机脚本设置

  • 应用程序的安装与删除

  • 文件重定向

  • 限制访问可移动存储设备

  • 用户工作环境配置

  • 其他系统设置

组策略对象

组策略对象(GPO)即组策略设置集合,其中包含应用于特点用户或计算机的策略信息和具体配置。在设置组策略时,只需要将组策略对象链接到指定的站点,域和组织单位,其中的策略值便会应用到该站点,域和组织单位的所有用户和计算机

组策略对象包括组策略容器(GPC)和组策略模板(GPT)组成

组策略容器存储在活动目录的域分区,组策略模板被存放在域控制器下的如下文件夹%SYSTEMROOT%\SYSVOL\sysvol\域名\Policies

Default Domain Policy

默认组策略对象,应用到其所在域的所有用户和计算机

Default Domain Controller Policy

默认组策略对象,应用到Domain Controllers中所有用户和计算机

组策略容器(GPO)

组策略容器(GPC)记录着该组策略对象的策略名称,标识组策略的GUID,组策略链接到哪个作用域,组策略模板路径,组策略版本信息等数据

组策略容器位于LDAP数据库中的“CN=Policies, CN=System, DC=<域名>, DC=com” ,该节点下是以GUID命名的各个组策略容器

运行adsiedit.msc打开ADSI编辑器,链接之后找到该路径

右击点开某一个属性

有几个重要的属性

  • displayname:组策略的可读名称

  • gPCFileSysPath:组策略模板(GPT)所在的具体路径,即客户端查找具体的配置信息的物理路径,位于域控的SYSVOL共享中

  • gPCMachineExtensionNames:客户端执行该组策略所需的客户端扩展程序

当某个对象应用了某个指定的组策略,该对象的gPLink属性及那个包含指向该组策略的完整DN

[LDAP://CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=fbi,DC=gov;0]

最后的0或者1表示该条策略应用时是否强制,0表示非强制,1表示强制

组策略模板(GPT)

组策略模板是组策略具体的策略配置信息

主要涉及两个文件夹:

  • SYSVOL目录是AD域中的一个共享文件夹,在AD活动目录安装时创建。通常用来存放组策略数据和 一些脚本 配置文件,这些策略和脚本将用于传递给域成员机器。

    • 域控机器之间要自动同步域数据,SYSVOL文档允许该域内的所有DC机之间进行复制,并且所有的AD用户都可以访问它

    • 域中用户登录计算机会首先在SYSVOL文件查找GPO和启动脚本

    • 该目录由于针对的是域内所有机器和用户,所以域内中的合法用户均可以访问和执行该目录的文件

    • NETLOGON目录的挂载点位于SYSVOL\domain\SCRIPTS,主要存放的是一些脚本信息,是AD活动目录安装时候自动创建的,是在sysvol下面的一个子目录文件夹

  • GPT位于SYSVOL共享下的DOMAIN_NAME\Policies目录下的各个GUID文件夹内,GPT在SYSVOL共享中以容器的形式组织目录结构,以GUID标识为目录名的各个组策略配置目录包含以下内容

    • Macheine目录:包含针对计算机的策略配置

    • User目录:包含针对用户的策略配置

    • gpt.ini文件:该组策略对象的一些配置信息(如版本信息、策略名称)

创建组策略

选择某组织单位(OU),右击选择,链接创建的GPO

链接成功

右击该策略点击编辑即可配置该组策略

组策略相关的ACL

拥有(WriteDacl,WriteOwner,GenericWrite,GenericAll,Full Control)这 些权限,都包括了对某个属性的WriteProperty

创建GPO的权限

CN=Policies,CN=System,<BaseDn>具备CreateChild的权限

GPO链接的权限

如果有对gPLink属性或者gPOpptions属性的修改权限,就可以修改这个这个域/站点/OU链接的OU

遍历站点:

遍历OU:

对gLink或者gPOpptions的WriteProperty权限

修改现有GPO权限

查看文件夹ACL

对某条策略查看名字

安全问题

  • MS14-025

参考

windows protocol (gitbook.io)arrow-up-right

组策略学习和研究arrow-up-right

《内网渗透体系建设》

主机安全技术剖析 - Windows 本地提权(基础篇) (qq.com)arrow-up-right

Last updated