Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
MSRMapper — 针对 Windows x64 的手动内核驱动映射器,利用 Lenovo 的 LnvMSRIO.sys 中的 CVE-2025-8061 执行 BYOVD 攻击,将 PE64 驱动映射到 ring 0。 | Kitploit
工具/GitHubGitHub/ull0a/msrmapper
权限提升内存取证漏洞利用逆向工程Shellcode后渗透利用红队Payload 开发二进制利用
GitHubull0a/msrmapper

MSRMapper

针对 Windows x64 的手动内核驱动映射器,利用 Lenovo 的 LnvMSRIO.sys 中的 CVE-2025-8061 执行 BYOVD 攻击,将 PE64 驱动映射到 ring 0。

18小时20分前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

MSRMapper

适用于 Windows x64 的 BYOVD 手动映射器 · CVE-2025-8061


MSRMapper 运行中

概述

MSRMapper 是一款适用于 Windows x64 的手动内核驱动映射器,它利用存在漏洞的 Lenovo 驱动 LnvMSRIO.sys 中的 CVE-2025-8061 来执行 BYOVD(自带易受攻击驱动)攻击。

该项目将 PE64 驱动直接映射到内核内存中,无需使用 sc create 或服务,并在 ring 0 中执行其 DriverEntry。整个过程依赖于:

  • 通过 LnvMSRIO.sys 进行 MSR 和物理内存读写。
  • 使用 DbgHelp 通过 PDB 文件解析内核符号。
  • 通过 NtQuerySystemInformation 的 SuperfetchPfnQuery 类进行 VA → PA 转换。
  • 临时劫持 LSTAR 以执行 ring-0 shellcode。
  • 临时挂钩 NtAddAtom 以调用内核函数,如 ExAllocatePoolWithTag、RtlCopyMemory 和 DriverEntry。

状态: 已在 Windows 10 22H2(OS Build 19045.6466) 上测试。驱动成功映射,且 DriverEntry 返回 STATUS_SUCCESS(0x0)。


功能特性

  • 使用 ExAllocatePoolWithTag 在内核中手动映射 PE64。
  • 通过从 Microsoft 符号服务器下载 PDB 来解析内核符号(KiSystemCall64、NtAddAtom 等)。
  • 使用 Superfetch(NtQuerySystemInformation 类 0x4F)进行 VA → PA 转换,无需自定义页表遍历器。
  • 通过 LnvMSRIO.sys 进行 MSR(LSTAR、FMASK)和物理内存读写。
  • 动态生成的 shellcode,其功能包括:
    • 恢复原始的 LSTAR。
    • 调用 MmGetPhysicalAddress 以获取 NtAddAtom 的 PA。
    • 通过 swapgs; sysret 将控制权返回用户模式。
  • 临时挂钩 NtAddAtom(12 字节 jmp rax)以调用任意内核函数。

工作原理

1. 初始化

  • 打开 \\.\WinMsrDev(由 LnvMSRIO.sys 暴露的服务)。
  • 通过 EnumDeviceDrivers 获取 ntoskrnl 基址,并使用 LSTAR 进行验证。
  • 初始化 PdbResolver 以解析内核符号 RVA。

2. 获取 NtAddAtom 的 PA

  • 构建一段 shellcode,当 LSTAR 被劫持时将在 ring 0 中运行。
  • 将 swapgs; iretq gadget 写入 LSTAR。
  • 使用 PrepareStack 准备栈,并通过 EnableACUserMode 在用户模式下启用 AC=1。
  • 在 syscall 时,CPU 跳转到 gadget,运行 shellcode,调用 MmGetPhysicalAddress(NtAddAtom),并将 PA 存储到用户缓冲区中。
  • shellcode 恢复 LSTAR,并通过 swapgs; sysret 返回用户模式。

3. 驱动映射

  • 使用 ExAllocatePoolWithTag 分配非分页池(通过临时挂钩 NtAddAtom 调用)。
  • 使用 RtlCopyMemory 将 PE 映像复制到池中。
  • 应用重定位、解析导入并修复安全 cookie。
  • 以 DriverObject = NULL 和 RegistryPath = NULL 调用 DriverEntry。

4. 清理

  • 恢复 NtAddAtom 的原始字节。
  • 恢复原始 MSR。
  • 关闭易受攻击驱动的句柄。

环境要求

  • Windows 10/11 x64(已在 22H2 上测试)。
  • Visual Studio 2022,包含:
    • 使用 C++ 的桌面开发。
    • MASM(Microsoft Macro Assembler)以构建 .asm 文件。
  • Windows SDK 和 WDK(如果需要构建 payload 驱动)。
  • 已安装存在漏洞的 LnvMSRIO.sys(CVE-2025-8061),且 WinMsrDev 服务正在运行。
  • 管理员权限。
  • 首次运行时需要互联网访问以下载 Microsoft PDB,或使用 C:\Symbols 中的本地缓存。
  • CMake 3.20 或更高版本。

构建

本项目使用 CMake。要从命令行构建:

  1. 生成 Visual Studio 2022 解决方案:

    root@kitploit:~
    cmake -B build -G "Visual Studio 17 2022" -A x64
    
  2. 以 Release 模式构建:

    root@kitploit:~
    cmake --build build --config Release
    

输出的二进制文件将位于 build/bin/Release/(或根据 CMake 配置的类似路径)。

或者,你可以在 Visual Studio 2022 中打开生成的 build/KernelLoader.sln 并从那里构建。

确保 ShellcodeAsm.asm 和 EnableAC.asm 使用 MASM 编译。提供的 CMakeLists.txt 会自动处理这一点。

如果需要调整构建配置,请编辑 CMakeLists.txt。

使用方法

  1. 安装并启动 LnvMSRIO.sys 服务:

    root@kitploit:~
    sc create WinMsrDev type= kernel binPath= C:\path\to\LnvMSRIO.sys
    sc start WinMsrDev
    
  2. 以管理员身份运行 KernelLoader.exe:

    root@kitploit:~
    KernelLoader.exe
    
  3. 要查看已映射驱动的 DbgPrint 输出,请以管理员身份使用 DebugView(Sysinternals),并设置:

    • Capture → Capture Kernel
    • Options → Enable Verbose Kernel Output
    • 如有必要,调整以下位置的过滤器:
      root@kitploit:~
      HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
      
      创建一个名为 Default 的 DWORD,值为 。

注意事项

  • 在某些 PdbResolver 日志中出现的 DBGHELP: ... - unmatched 消息是表面性的。PDB 被加载到一个人为的虚拟基址,且 SymFromName 仍能正常工作。它不会影响符号解析。
  • 在 Windows 11 24H2 上,EnumDeviceDrivers 可能返回错误的基址。本项目通过 LSTAR - KiSystemCall64 计算真实基址。
  • NtAddAtom 挂钩是临时的,并在每次调用后恢复。尽管如此,请仅在受控环境中使用。
  • shellcode 假定 SMEP/SMAP 已启用。它们通过 CR4 被临时禁用,并在返回用户模式前恢复。
下载工具
  • 自动恢复挂钩和原始 MSR。
  • 支持 Windows 11 24H2,在该版本中 EnumDeviceDrivers 可能返回错误的内核基址;真实内核基址通过 LSTAR - KiSystemCall64 计算得出。
  • 0xFFFFFFFF