Writable Sys Path +Dll Hijacking Privesc

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

支持 HackTricks 的其他方式:

简介

如果您发现可以在系统路径文件夹中写入(请注意,如果您可以在用户路径文件夹中写入,则此方法将无效),则可能可以提升系统权限

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

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

Dll Hijacking

使用 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、添加用户、执行信标...

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

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

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

从零开始学习 AWS 黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持 HackTricks 的其他方式:

最后更新于