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 - 写入属性
访问令牌
令牌的组成主要有如下部分:
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)
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
当访问文件时系统做出判断
如果没有 DACL,系统将允许访问
如果存在 DACL,但没有 ACE,系统将拒绝所有访问
如果存在 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
参考
《内网渗透体系建设》
Last updated