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
PINKPANTHER — Shellcode Windows x64 en mode noyau, fabriqué à la main, pour le vol de jetons (token stealing) | Kitploit
Outils/GitHubGitHub/winterknife/pinkpanther
Escalade de PrivilègesShellcodePost-ExploitationDéveloppement de Charges UtilesExploitation de Binaires
GitHubwinterknife/pinkpanther

PINKPANTHER

Shellcode Windows x64 en mode noyau, fabriqué à la main, pour le vol de jetons (token stealing)

Voir le dépôt
51761il y a 2 ansVérifié par Kitploit

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

PINKPANTHER

Résumé

Windows x64 shellcode en mode noyau conçu à la main pour remplacer le jeton d'accès principal du processus en cours d'exécution par le jeton du processus SYSTEM pour une élévation de privilèges (Elevation of Privilege(EoP)).

Versions du système d'exploitation prises en charge

  • Windows 7/Windows Server 2008 R2 Build 7601
  • Windows 8/Windows Server 2012 Build 9200
  • Windows 8.1/Windows Server 2012 R2 Build 9600
  • Windows 10 1507/TS1 Build 10240
  • Windows 10 1511/TS2 Build 10586
  • Windows 10 1607/RS1/Windows Server 2016 Build 14393
  • Windows 10 1703/RS2 Build 15063
  • Windows 10 1709/RS3 Build 16299
  • Windows 10 1803/RS4 Build 17134
  • Windows 10 1809/RS5/Windows Server 2019 Build 17763
  • Windows 10 1903/19H1 Build 18362
  • Windows 10 1909/19H2 Build 18363
  • Windows 10 2004/20H1 Build 19041
  • Windows 10 2009/20H2 Build 19042
  • Windows 10 2104/21H1 Build 19043
  • Windows 10 2110/21H2 Build 19044

Compilation et déploiement

Les prérequis pour compiler ce projet sont :

  1. Visual Studio 2019(any edition will do fine)
  2. Windows 10 SDK, version 2004
  3. Windows 10 WDK, version 2004
  4. Python3

Il faut noter ici qu'un simple assembleur suffit (ce projet utilise MASM), car techniquement, c'est tout ce dont vous avez besoin.

Après avoir installé ce qui précède, il suffit d'ouvrir la solution avec Visual Studio et de compiler pour la cible x64.

Après une compilation réussie, les binaires se trouvent dans le répertoire Bin, sous le sous-répertoire correspondant à l'architecture.

Vous pouvez également télécharger un shellcode indépendant de la position, prêt à déployer, depuis Releases.

Veuillez NE PAS essayer de déployer la charge utile sur une machine dont vous dépendez pour travailler si vous n'êtes pas sûr de son fonctionnement.

Reportez-vous à la documentation Microsoft pour toute information supplémentaire.

Tests

À des fins de test, je recommande vivement d'utiliser flare-kscldr pour déployer le shellcode en mode noyau sur une VM de test, et le guide de configuration système de CodeMachine pour le développement et le débogage du noyau pour configurer une VM invitée Hyper-V avec une prise en charge complète du débogage du noyau.

Vous pouvez également envisager d'automatiser le processus avec kdbg-driver-vagrant pour déployer rapidement une VM de test avec un débogage complet du noyau via Vagrant.

Captures d'écran

demo

Mises en garde

Comme me l'a fait remarquer Dmytro Oleksiuk(@d_olex), il existe dans le code des conditions de concurrence (race conditions) plutôt flagrantes, liées spécifiquement à :

  1. Le parcours manuel des structures nt!_EPROCESS reliées entre elles par une liste doublement chaînée circulaire, sans utiliser de primitive de synchronisation/mécanisme de verrouillage
  2. Le référencement non sûr de ces objets processus pendant que nous les manipulons

Ils ne disposent actuellement d'aucune protection contre les modifications qui leur sont apportées pendant que nous les manipulons.

Est-ce un problème ? Oui, les conditions de concurrence sont toujours problématiques et peuvent provoquer toutes sortes de comportements indéfinis et de désagréments sous forme de bugchecks.

L'utilisation de cette charge utile affectera-t-elle la stabilité de mon exploit ? Peut-être.

Alors, quelle est la solution ? La solution comporte deux étapes.

La partie 1 consiste à acquérir un verrou de type attente comme les pushlocks - nt!PspActiveProcessLock(pointeur de pushlock) pour un accès exclusif via nt!ExAcquirePushLockExclusive, avant de parcourir la liste des processus (la livraison normale des APC du noyau doit être désactivée au préalable), puis nt!ExReleasePushLockExclusive pour libérer le verrou une fois que nous avons fini d'utiliser la liste, moment auquel la livraison normale des APC du noyau doit être réactivée.

Cependant, étant donné que cette variable globale n'est pas exportée par le noyau nt, une approche bien plus propre et plus sûre consisterait à utiliser l'API nt!ZwQuerySystemInformation avec SYSTEM_INFORMATION_CLASS == SystemProcessInformation pour trouver le PID à partir de l'ImageName, puis nt!PsLookupProcessByProcessId pour obtenir nt!_EPROCESS VA à partir du PID.

Si vous êtes curieux de savoir comment le noyau procède pour la première approche, je vous invite à examiner nt!PsGetNextProcess dans un désassembleur.

La partie 2 consiste à référencer en toute sécurité les objets à l'aide de la famille d'APIs nt!ObReferenceObject afin d'augmenter le compteur de références de l'objet processus pour qu'il ne puisse pas être supprimé tant que nous ne l'avons pas explicitement décrémenté à la fin, une fois que nous en avons terminé, à l'aide de nt!ObDereferenceObject.

Notez qu'augmenter manuellement le compteur de références est redondant, car un appel à nt!PsLookupProcessByProcessId, s'il aboutit, le fait pour nous.

La mise en œuvre de ces correctifs nécessiterait toutefois de trouver l'adresse de base de ntoskrnl.exe et d'y résoudre les symboles en parcourant l'EAT pour localiser les pointeurs de fonction à l'aide d'un algorithme de hachage de chaînes, ce qui augmenterait considérablement la taille de la charge utile.

Je déciderai peut-être de l'implémenter un jour, ou simplement d'écrire en C et de spammer la sortie du compilateur :)

Merci à Dmytro Oleksiuk(@d_olex) et à Paul L.(@am0nsec) d'avoir signalé la ou les erreurs et d'avoir également suggéré le correctif.

Travaux connexes

  1. Exploit Development: Panic! At The Kernel - Token Stealing Payloads Revisited on Windows 10 x64 and Bypassing SMEP
  2. Starting with Windows Kernel Exploitation – part 3 – stealing the Access Token
  3. [Kernel Exploitation] 2: Payloads
  4. Windows Kernel Shellcodes - a compendium
  5. Windows Kernel Shellcode on Windows 10 – Part 1
  6. Windows Kernel Shellcode : TokenStealer
  7. x64 Kernel Privilege Escalation
Télécharger l’outil