hacktricks/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md

6.2 KiB
Raw Blame History

可写的 Sys 路径 + Dll 劫持提权

从零开始学习 AWS 黑客技术,成为专家 htARTEHackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

简介

如果您发现可以在系统路径文件夹中写入(请注意,如果您可以在用户路径文件夹中写入,这将不起作用),则可能可以提升系统权限

为了做到这一点,您可以滥用Dll 劫持,在这种情况下,您将劫持一个由具有比您更高权限的服务或进程加载的库,因为该服务正在加载一个在整个系统中可能甚至不存在的 Dll它将尝试从您可以写入的系统路径中加载它。

有关什么是 Dll 劫持的更多信息,请查看:

{% content-ref url="./" %} . {% endcontent-ref %}

使用 Dll 劫持进行提权

查找缺失的 Dll

您需要做的第一件事是识别一个正在以比您更高权限运行的进程,该进程正在尝试从您可以写入的系统路径加载一个 Dll

在这种情况下的问题是,这些进程可能已经在运行。要找出哪些 Dll 缺少服务,您需要尽快启动 procmon在进程加载之前。因此要查找缺少的 .dll请执行以下操作

  • 创建文件夹 C:\privesc_hijacking 并将路径 C:\privesc_hijacking 添加到系统路径环境变量。您可以手动执行此操作,也可以使用PS
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"

# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}

# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
  • 启动 procmon 并转到 Options --> Enable boot logging,然后在提示中按 OK
  • 然后,重新启动。计算机重新启动后,procmon 将立即开始记录事件。
  • 一旦 Windows 启动,请再次执行 procmon,它会告诉您它一直在运行,并询问您是否要将事件存储在文件中。选择 yes 并将事件存储在文件中。
  • 文件 生成后,关闭已打开的 procmon 窗口并打开事件文件。
  • 添加以下 过滤器,您将找到所有一些 进程尝试从可写的 System Path 文件夹加载 的 Dlls

丢失的 Dlls

在一个免费的 虚拟 (vmware) Windows 11 机器 上运行后,我得到了以下结果:

在这种情况下,.exe 是无用的,所以请忽略它们,丢失的 DLL 来自于:

服务 Dll CMD 行
任务计划程序 (Schedule) WptsExtensions.dll C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule
诊断策略服务 (DPS) Unknown.DLL C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS
??? SharedRes.dll C:\Windows\system32\svchost.exe -k UnistackSvcGroup

找到这些后,我发现了这篇有趣的博客文章,也解释了如何 滥用 WptsExtensions.dll 进行权限提升。这就是我们 现在要做的事情

利用

因此,为了 提升权限,我们将劫持库 WptsExtensions.dll。有了 路径名称,我们只需要 生成恶意 dll

您可以尝试使用这些示例之一。您可以运行有效载荷,如:获取反向 shell、添加用户、执行信标...

{% hint style="warning" %} 请注意,并非所有服务都以 NT AUTHORITY\SYSTEM 运行,有些也以 NT AUTHORITY\LOCAL SERVICE 运行,后者权限较低,您 无法创建新用户 来滥用其权限。
但是,该用户具有 seImpersonate 权限,因此您可以使用 potato suite 来提升权限。因此,在这种情况下,获取反向 shell 是一个比尝试创建用户更好的选择。 {% endhint %}

在撰写本文时,任务计划程序 服务是以 Nt AUTHORITY\SYSTEM 运行的。

生成了 恶意 Dll 后(在我的情况下,我使用了 x64 反向 shell我得到了一个 shell但是防御程序将其杀死因为它来自 msfvenom将其保存在可写的 System Path 中,并将其命名为 WptsExtensions.dll,然后 重新启动 计算机(或重新启动服务或执行必要的操作以重新运行受影响的服务/程序)。

当服务重新启动时,dll 应该被加载和执行(您可以重复使用 procmon 技巧来检查 库是否按预期加载)。