6.2 KiB
可写的 Sys 路径 + Dll 劫持提权
从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果您想看到您的公司在 HackTricks 中做广告或下载 PDF 版的 HackTricks,请查看订阅计划!
- 获取官方 PEASS & HackTricks 商品
- 探索PEASS 家族,我们的独家NFT收藏
- 加入 💬 Discord 群组 或 电报群组 或在 Twitter 🐦 @carlospolopm** 上关注**我们。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。
简介
如果您发现可以在系统路径文件夹中写入(请注意,如果您可以在用户路径文件夹中写入,这将不起作用),则可能可以提升系统权限。
为了做到这一点,您可以滥用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 技巧来检查 库是否按预期加载)。