Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/ull0a/msrmapper
Escalade de PrivilègesCriminalistique MémoireExploitationRétro-ingénierieShellcodePost-ExploitationRed TeamingDéveloppement de Charges UtilesExploitation de Binaires
GitHubull0a/msrmapper

MSRMapper

Mappeur manuel de pilote noyau pour Windows x64 qui exploite CVE-2025-8061 dans LnvMSRIO.sys de Lenovo pour réaliser une attaque BYOVD, en mappant des pilotes PE64 dans le ring 0.

1il y a 8h 20mPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

MSRMapper

BYOVD Manual Mapper pour Windows x64 · CVE-2025-8061


MSRMapper en cours d'exécution

Aperçu

MSRMapper est un mapper manuel de pilote noyau pour Windows x64 qui exploite CVE-2025-8061 dans le pilote vulnérable Lenovo LnvMSRIO.sys pour réaliser une attaque BYOVD (Bring Your Own Vulnerable Driver).

Le projet mappe un pilote PE64 directement dans la mémoire du noyau sans utiliser sc create ni de service, et exécute son DriverEntry en ring 0. L'ensemble du processus repose sur :

  • Lecture/écriture des MSR et de la mémoire physique via LnvMSRIO.sys.
  • Résolution des symboles du noyau via les fichiers PDB à l'aide de DbgHelp.
  • Traduction VA → PA via la classe SuperfetchPfnQuery de NtQuerySystemInformation.
  • Détournement temporaire de LSTAR pour exécuter du shellcode en ring 0.
  • Hook temporaire de NtAddAtom pour appeler des fonctions du noyau telles que ExAllocatePoolWithTag, RtlCopyMemory et DriverEntry.

Statut : Testé sur Windows 10 22H2 (OS Build 19045.6466). Le pilote est mappé avec succès et DriverEntry retourne STATUS_SUCCESS (0x0).


Fonctionnalités

  • Mappage manuel de PE64 dans le noyau à l'aide de ExAllocatePoolWithTag.
  • Résolution des symboles du noyau (KiSystemCall64, NtAddAtom, etc.) en téléchargeant les PDB depuis le Microsoft Symbol Server.
  • Traduction VA → PA avec Superfetch (NtQuerySystemInformation classe 0x4F), sans nécessiter de parcours personnalisé des tables de pages.
  • Lecture/écriture des MSR (LSTAR, FMASK) et de la mémoire physique via LnvMSRIO.sys.
  • Shellcode généré dynamiquement qui :
    • Restaure le LSTAR d'origine.
    • Appelle MmGetPhysicalAddress pour obtenir l'adresse physique de NtAddAtom.
    • Rend le contrôle au mode utilisateur via swapgs; sysret.

Fonctionnement

1. Initialisation

  • Ouvre \\.\WinMsrDev (service exposé par LnvMSRIO.sys).
  • Obtient la base de ntoskrnl via EnumDeviceDrivers et la valide avec LSTAR.
  • Initialise PdbResolver pour résoudre les RVA des symboles du noyau.

2. Obtention de l'adresse physique de NtAddAtom

  • Construit un shellcode qui s'exécutera en ring 0 lorsque LSTAR est détourné.
  • Écrit le gadget swapgs; iretq dans LSTAR.
  • Prépare la pile avec PrepareStack et active AC=1 en mode utilisateur via EnableACUserMode.
  • Lors du syscall, le CPU saute vers le gadget, exécute le shellcode, appelle MmGetPhysicalAddress(NtAddAtom) et stocke l'adresse physique dans un buffer utilisateur.
  • Le shellcode restaure LSTAR et retourne en mode utilisateur avec swapgs; sysret.

3. Mappage du pilote

  • Alloue un pool non paginé avec ExAllocatePoolWithTag (invoqué via le hook temporaire de NtAddAtom).
  • Copie l'image PE dans le pool avec RtlCopyMemory.
  • Applique les relocations, résout les imports et corrige le cookie de sécurité.
  • Appelle DriverEntry avec DriverObject = NULL et RegistryPath = NULL.

4. Nettoyage

  • Restaure les octets d'origine de NtAddAtom.
  • Restaure les MSR d'origine.
  • Ferme le handle du pilote vulnérable.

Prérequis

  • Windows 10/11 x64 (testé sur 22H2).
  • Visual Studio 2022 avec :
    • Développement Desktop en C++.
    • MASM (Microsoft Macro Assembler) pour compiler les fichiers .asm.
  • Windows SDK et WDK (si vous devez compiler le pilote de payload).
  • LnvMSRIO.sys vulnérable (CVE-2025-8061) installé et le service WinMsrDev en cours d'exécution.
  • Privilèges Administrateur.
  • Accès Internet la première fois pour télécharger les PDB Microsoft, ou un cache local dans C:\Symbols.
  • CMake 3.20 ou plus récent.

Compilation

Ce projet utilise CMake. Pour compiler depuis la ligne de commande :

  1. Générez la solution Visual Studio 2022 :

    root@kitploit:~
    cmake -B build -G "Visual Studio 17 2022" -A x64
    
  2. Compilez en mode Release :

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

Les binaires de sortie se trouveront dans build/bin/Release/ (ou un chemin similaire selon la configuration CMake).

Alternativement, vous pouvez ouvrir le fichier build/KernelLoader.sln généré dans Visual Studio 2022 et compiler à partir de là.

Assurez-vous que ShellcodeAsm.asm et EnableAC.asm sont compilés avec MASM. Le CMakeLists.txt fourni gère cela automatiquement.

Si vous devez ajuster la configuration de compilation, modifiez CMakeLists.txt.

Utilisation

  1. Installez et démarrez le service LnvMSRIO.sys :

    root@kitploit:~
    sc create WinMsrDev type= kernel binPath= C:\path\to\LnvMSRIO.sys
    sc start WinMsrDev
    
  2. Exécutez KernelLoader.exe en tant qu'Administrateur :

    root@kitploit:~
    KernelLoader.exe
    
  3. Pour voir la sortie DbgPrint du pilote mappé, utilisez DebugView (Sysinternals) en tant qu'Administrateur avec :

    • Capture → Capture Kernel
    • Options → Enable Verbose Kernel Output
    • Si nécessaire, ajustez le filtre à :
      root@kitploit:~
      HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
      
      en créant un DWORD nommé Default avec la valeur .

Remarques

  • Le message DBGHELP: ... - unmatched qui apparaît dans certains logs de PdbResolver est cosmétique. Le PDB est chargé à une base virtuelle artificielle et SymFromName fonctionne toujours correctement. Cela n'affecte pas la résolution des symboles.
  • Sur Windows 11 24H2, EnumDeviceDrivers peut retourner une base incorrecte. Ce projet calcule la vraie base avec LSTAR - KiSystemCall64.
  • Le hook de NtAddAtom est temporaire et restauré après chaque appel. Néanmoins, utilisez ceci uniquement dans des environnements contrôlés.
  • Le shellcode suppose que SMEP/SMAP sont activés. Ils sont temporairement désactivés via CR4 et restaurés avant de retourner en mode utilisateur.
Télécharger l’outil
  • Hook temporaire de NtAddAtom (jmp rax de 12 octets) pour appeler des fonctions arbitraires du noyau.
  • Restauration automatique du hook et des MSR d'origine.
  • Prise en charge de Windows 11 24H2, où EnumDeviceDrivers peut retourner une base incorrecte ; la vraie base du noyau est calculée avec LSTAR - KiSystemCall64.
  • 0xFFFFFFFF