windows符号链接利用技术详解
字数 2274 2025-08-20 18:18:17

Windows符号链接利用技术详解

1. 符号链接技术概述

符号链接技术在近几年的提权漏洞中尤为常见,包括最新的CVE-2024-21111也使用了这种手法。2015年Google Project Zero安全研究员James Forshaw提供了这一方面研究成果的一系列文章。

2. 工具包介绍

p0tools目录中包含以下工具:

  • BaitAndSwitch.exe // 设置机会锁与对象符号链接
  • CreateDosDeviceSymlink.exe // 创建对象管理器符号链接
  • CreateHardlink.exe // 创建硬链接
  • CreateMountPoint.exe // 创建连接点
  • CreateNativeSymlink.exe // 创建原生符号链接
  • CreateNtfsSymlink.exe // 创建文件系统符号链接
  • CreateObjectDirectory.exe
  • CreateRegSymlink.exe // 创建注册表符号链接
  • CreateSymlink.exe // 创建:连接点 + 对象管理器符号链接
  • DeleteMountPoint.exe // 删除连接点
  • DumpReparsePoint.exe
  • SetOpLock.exe // 设置机会锁

3. 文件系统符号链接(NTFS Symlinks)

3.1 权限要求

创建符号链接需要管理员权限,非管理员权限运行会报错。

查看权限方法:

  1. Ctrl+R输入secpol.msc
  2. 导航到Local Policies -> User Rights Assignment
  3. 找到并双击Create symbolic links

3.2 创建目录符号链接

管理员权限下运行:

.\CreateNtfsSymlink.exe -d C:\Users\root\Desktop\test01\Dir C:\Users\root\Desktop\test01\Other

注意:

  • Dir目录要提前建立好,并且要是空目录
  • 如果Other目录下有111.txt文件,可以直接从Dir中读取内容

3.3 创建文件符号链接

.\CreateNtfsSymlink.exe -r C:\Users\root\Desktop\test01\File_SymbolLink\demo_file_link.txt C:\Users\root\Desktop\test01\demo_file.txt

4. 注册表项符号链接(Registry Key Symbolic Links)

4.1 注册表符号链接示例

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet 是 HKEY_LOCAL_MACHINE\System\ControlSet001 的符号链接
  • HKEY_CURRENT_CONFIG 是指向 HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current 的符号链接

4.2 创建注册表符号链接

  1. 创建密钥并将其指定为链接:
HKEY hKey;
RegCreateKeyEx(HKEY_CURRENT_USER, L"DesktopColors", 0, nullptr, 
              REG_OPTION_CREATE_LINK, KEY_WRITE, nullptr, &hKey, nullptr);

关键点:

  • 使用REG_OPTION_CREATE_LINK标志
  • 需要KEY_WRITE访问权限
  1. 设置链接目标:
WCHAR path[] = L"\\REGISTRY\\USER\\S-1-5-21-4099861355-3358530361-1466466590-1000\\Control Panel\\Desktop\\Colors";
RegSetValueEx(hKey, L"SymbolicLinkValue", 0, REG_LINK, 
             (const BYTE*)path, wcslen(path) * sizeof(WCHAR));

注意:

  • 必须使用本机注册表绝对路径
  • 路径格式为\REGISTRY\USER\SID\...

4.3 删除注册表符号链接

标准API无法删除链接,必须使用NtDeleteKey:

extern "C" int NTAPI NtDeleteKey(HKEY);
#pragma comment(lib, "ntdll")

HKEY hKey;
RegOpenKeyEx(HKEY_CURRENT_USER, L"DesktopColors", 
            REG_OPTION_OPEN_LINK, DELETE, &hKey);
NtDeleteKey(hKey);

5. 连接点(Junctions)

5.1 创建连接点

非管理员权限也可以创建连接点:

mklink /J C:\Users\root\Desktop\test01\SecDir C:\Users\root\Desktop\test01\Other

条件:

  • SecDir目录不应存在,执行后会自动创建
  • 对Other目录需要有写入权限

5.2 API创建连接点

if (!ReparsePoint::CreateMountPoint(argv[1], argv[2], argc > 3 ? argv[3] : L"")) {
    printf("Error creating mount point - %ls\n", GetErrorMessage().c_str());
}

特点:

  • 被转换的目录可以存在
  • 但目录必须为空
  • 需要写入权限

5.3 文件系统符号链接与连接点区别

特性 文件系统符号链接 连接点
链接对象 文件和目录 仅目录
跨卷支持 支持 主要同一卷内
权限要求 需要管理员权限 普通用户权限

6. 硬链接(Hard Links)

6.1 创建硬链接

非特权用户可以创建硬链接:

if (CreateNativeHardlink(argv[1], argv[2])) {
    printf("Done\n");
}

特点:

  • 仅适用于文件,不适用于目录或跨卷
  • 如果无文件写入权限则需要管理员权限
  • Windows 10高版本已缓解此技术

7. 对象管理器符号链接(Object Manager symbolic links)

7.1 对象管理器概述

Windows使用逻辑对象跟踪所有资源,每个资源都驻留在命名空间中:

  • C:\目录通过GLOBAL??命名空间中的符号链接跳转
  • 普通用户可以在\RPC Control命名空间创建符号链接

7.2 创建对象管理器符号链接

HANDLE CreateSymlink(HANDLE root, LPCWSTR linkname, LPCWSTR targetname) {
    // 使用NtCreateSymbolicLinkObject API
    NTSTATUS status = fNtCreateSymbolicLinkObject(&hLink, 
        SYMBOLIC_LINK_ALL_ACCESS, &objAttr, &target);
}

执行:

CreateSymlink.exe C:\path\to\link C:\path\to\target

8. 任意文件删除技术

8.1 技术原理

结合连接点与对象管理器符号链接:

  1. 创建dont_delete.txt到\RPC Control对象的符号链接
  2. 将\RPC Control挂载到\test\目录
  3. 删除test\config.txt实际会删除dont_delete.txt

8.2 实现步骤

  1. 创建符号链接:
HANDLE hret = CreateSymlink(nullptr, L"\\RPC Control\\config.txt", 
    L"\\??\\C:\\path\\dont_delete.txt");
  1. 创建挂载点:
ReparsePoint::CreateMountPoint(L"C:\\path\\test", L"\\RPC Control", L"");
  1. 使用PowerShell删除:
Remove-Item "C:\path\test\config.txt" -Force

9. 机会锁(Opportunistic locks)

9.1 机会锁概述

oplock可以放置在文件上,当其他进程访问时会被通知,用于TOCTOU攻击。

9.2 设置机会锁

SetOpLock.exe C:\path\to\file [rwdx]

参数:

  • r: FILE_SHARE_READ
  • w: FILE_SHARE_WRITE
  • d: FILE_SHARE_DELETE
  • x: Exclusive lock

9.3 BaitAndSwitch技术

BaitAndSwitch c:\path\to\link target_1 target_2 [sharemode]

原理:

  1. 第一次访问指向target_1
  2. 触发oplock后改为指向target_2

10. 实际应用

这些技术常见于杀毒软件漏洞利用,如:

  • 赛门铁克
  • 迈克菲
  • Windows Defender

通过符号链接技术可以实现本地提权漏洞利用。

Windows符号链接利用技术详解 1. 符号链接技术概述 符号链接技术在近几年的提权漏洞中尤为常见,包括最新的CVE-2024-21111也使用了这种手法。2015年Google Project Zero安全研究员James Forshaw提供了这一方面研究成果的一系列文章。 2. 工具包介绍 p0tools目录中包含以下工具: BaitAndSwitch.exe // 设置机会锁与对象符号链接 CreateDosDeviceSymlink.exe // 创建对象管理器符号链接 CreateHardlink.exe // 创建硬链接 CreateMountPoint.exe // 创建连接点 CreateNativeSymlink.exe // 创建原生符号链接 CreateNtfsSymlink.exe // 创建文件系统符号链接 CreateObjectDirectory.exe CreateRegSymlink.exe // 创建注册表符号链接 CreateSymlink.exe // 创建:连接点 + 对象管理器符号链接 DeleteMountPoint.exe // 删除连接点 DumpReparsePoint.exe SetOpLock.exe // 设置机会锁 3. 文件系统符号链接(NTFS Symlinks) 3.1 权限要求 创建符号链接需要管理员权限,非管理员权限运行会报错。 查看权限方法: Ctrl+R输入secpol.msc 导航到Local Policies -> User Rights Assignment 找到并双击Create symbolic links 3.2 创建目录符号链接 管理员权限下运行: 注意: Dir目录要提前建立好,并且要是空目录 如果Other目录下有111.txt文件,可以直接从Dir中读取内容 3.3 创建文件符号链接 4. 注册表项符号链接(Registry Key Symbolic Links) 4.1 注册表符号链接示例 HKEY_ LOCAL_ MACHINE\System\CurrentControlSet 是 HKEY_ LOCAL_ MACHINE\System\ControlSet001 的符号链接 HKEY_ CURRENT_ CONFIG 是指向 HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current 的符号链接 4.2 创建注册表符号链接 创建密钥并将其指定为链接: 关键点: 使用REG_ OPTION_ CREATE_ LINK标志 需要KEY_ WRITE访问权限 设置链接目标: 注意: 必须使用本机注册表绝对路径 路径格式为\\REGISTRY\\USER\\SID\\... 4.3 删除注册表符号链接 标准API无法删除链接,必须使用NtDeleteKey: 5. 连接点(Junctions) 5.1 创建连接点 非管理员权限也可以创建连接点: 条件: SecDir目录不应存在,执行后会自动创建 对Other目录需要有写入权限 5.2 API创建连接点 特点: 被转换的目录可以存在 但目录必须为空 需要写入权限 5.3 文件系统符号链接与连接点区别 | 特性 | 文件系统符号链接 | 连接点 | |------|----------------|--------| | 链接对象 | 文件和目录 | 仅目录 | | 跨卷支持 | 支持 | 主要同一卷内 | | 权限要求 | 需要管理员权限 | 普通用户权限 | 6. 硬链接(Hard Links) 6.1 创建硬链接 非特权用户可以创建硬链接: 特点: 仅适用于文件,不适用于目录或跨卷 如果无文件写入权限则需要管理员权限 Windows 10高版本已缓解此技术 7. 对象管理器符号链接(Object Manager symbolic links) 7.1 对象管理器概述 Windows使用逻辑对象跟踪所有资源,每个资源都驻留在命名空间中: C:\目录通过GLOBAL??命名空间中的符号链接跳转 普通用户可以在\RPC Control命名空间创建符号链接 7.2 创建对象管理器符号链接 执行: 8. 任意文件删除技术 8.1 技术原理 结合连接点与对象管理器符号链接: 创建dont_ delete.txt到\\RPC Control对象的符号链接 将\\RPC Control挂载到\test\目录 删除test\config.txt实际会删除dont_ delete.txt 8.2 实现步骤 创建符号链接: 创建挂载点: 使用PowerShell删除: 9. 机会锁(Opportunistic locks) 9.1 机会锁概述 oplock可以放置在文件上,当其他进程访问时会被通知,用于TOCTOU攻击。 9.2 设置机会锁 参数: r: FILE_ SHARE_ READ w: FILE_ SHARE_ WRITE d: FILE_ SHARE_ DELETE x: Exclusive lock 9.3 BaitAndSwitch技术 原理: 第一次访问指向target_ 1 触发oplock后改为指向target_ 2 10. 实际应用 这些技术常见于杀毒软件漏洞利用,如: 赛门铁克 迈克菲 Windows Defender 通过符号链接技术可以实现本地提权漏洞利用。