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
EternalBlueC — Suite EternalBlue refaite en C/C++ qui inclut : MS17-010 Exploit, EternalBlue vulnerability detector, DoublePulsar detector et DoublePulsar Shellcode & DLL uploader | Kitploit
Outils/GitHubGitHub/bhassani/eternalbluec
Frameworks d'ExploitationAnalyse des VulnérabilitésExploitationShellcodeAnalyse de MalwareTests d'IntrusionApprentissage et ÉducationGénération de ShellcodeDéveloppement de Charges UtilesExploitation de Binaires
GitHubbhassani/eternalbluec
613138il y a 1 moisVé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

EternalBlueC

Suite EternalBlue refaite en C/C++ qui inclut : MS17-010 Exploit, EternalBlue vulnerability detector, DoublePulsar detector et DoublePulsar Shellcode & DLL uploader

Voir le dépôt

License: GPL v3

EternalBlueC

Suite EternalBlue refaite en C/C++ qui comprend :

  • Exploit MS17-010 (contient DoublePulsar)
  • Détecteur de vulnérabilité EternalBlue/MS17-010
  • Détecteur DoublePulsar
  • Téléchargement de DLL via DoublePulsar
  • Téléchargement de shellcode via DoublePulsar
  • Téléchargement de DLL avec structure SMB via DoublePulsar
  • Téléchargement de shellcode avec structure SMB via DoublePulsar
  • Téléchargement d’un EXE intégré dans une DLL via DoublePulsar

Réalisations du projet

  • Téléchargement de shellcode – terminé et fonctionnel, injectez votre shellcode dans n’importe quel processus de votre choix
  • Téléchargement de DLL – terminé et fonctionnel, injectez votre DLL dans n’importe quel processus de votre choix
  • Téléchargement de DLL avec un EXE embarqué – terminé, injectez votre DLL dans n’importe quel processus de votre choix et l’exécutable est déposé sous le nom « mssecsvc.exe »

Objectifs du projet

  • Permettre la génération dynamique des paquets de négociation, d’ouverture de session, de connexion d’arborescence, de TransNamedPipe et de Transaction2 de DoublePulsar à l’aide de structures SMB et de captures hexadécimales
  • Permettre la modification de la charge utile de l’exploit EternalBlue pour supprimer l’implant DoublePulsar et envoyer des shellcodes personnalisés à la place
  • Permettre la génération dynamique des paquets EternalBlue
  • Demander à l’utilisateur de saisir toutes les adresses IP, les charges utiles (shellcode ou chemins de fichiers) et l’autorisation de continuer
  • Être plus verbeux
  • Ajouter la version Windows issue de la réponse SMB à l’écran
  • Ajouter la prise en charge des paramètres en ligne de commande (DoublepulsarExecute.exe -h 192.168.0.8 -f PopCalculatorShellcode.bin)
  • Ajouter davantage de vérifications d’erreurs, comme le délai d’attente de socket

Suite EternalBlue et DoublePulsar

  • ms17_vuln_status.cpp – Ce programme envoie 4 paquets SMB : 1 de négociation, 1 d’ouverture de session, 1 de connexion d’arborescence et 1 de requête TransNamedPipe. Il lit ensuite la réponse NT_STATUS de la requête TransNamedPipe (requête PeekNamedPipe) et détermine si NT_STATUS dans le paquet SMB est égal à 0xC0000205 (STATUS_INSUFF_SERVER_RESOURCES). Si c’est le cas, la cible est vulnérable à MS17-010. Testé sur Windows 7 x64 non patché.

ms17vulnstatus

  • doublepulsar_check.cpp – Ce programme envoie 4 paquets SMB : 1 de négociation, 1 d’ouverture de session, 1 de connexion d’arborescence et 1 paquet Trans2 SESSION_SETUP. En envoyant le paquet Trans2 SESSION_SETUP, l’ID de multiplexage envoyé peut être comparé dans le paquet de réponse Trans2 avec l’ID de multiplexage : 0x51 ou 81. DoublePulsar lit l’ID de multiplexage envoyé et, après une commande ping réussie, renvoie +10 en hexadécimal pour l’ID de multiplexage dans la réponse Trans2 SESSION_SETUP. Ensuite, des commandes sont envoyées pour brûler la porte dérobée DoublePulsar. La commande de brûlage DoublePulsar se trouve dans les paramètres de délai d’attente du paquet SMB. Après cela, DoublePulsar devient dormant mais n’est pas supprimé du système. Testé sur Windows 7 x64.

doublepulsar_check

  • DoublePulsarXORKeyCalculator.cpp – Ce programme envoie 4 paquets SMB : 1 paquet de négociation et 3 requêtes. La dernière requête est une requête Trans2 SESSION_SETUP. Une réponse Trans2 SESSION_SETUP est reçue et la signature SMB est extraite à (Recvbuff[18] -> Recvbuff[22]). Recvbuff[22] indique le type d’architecture. Si 1, la cible est x64 bits, si 0, la cible est x86/32 bits. La signature SMB est convertie des caractères unsigned char en un entier non signé.

SMBSignatureWireshark

Ces valeurs de Recvbuff[18] à Recvbuff[22] sont ensuite passées par la fonction de calcul de la clé XOR DoublePulsar, qui génère une clé XOR entière non signée pouvant être utilisée pour chiffrer le shellcode ou la charge utile DLL qui sera téléchargée sur DoublePulsar. Testé sur Windows 7 x64.

Exemple de capture d’écran :

XORCalculator

Même clé que celle du binaire NSA original dans FUZZBUNCH XORCalculatorFromNSAbinary

  • DoublePulsar_structure_ping.cpp – Ce programme envoie 4 paquets SMB : 1 de négociation, 1 d’ouverture de session, 1 de connexion d’arborescence et 1 paquet Trans2 SESSION_SETUP. La différence avec doublepulsar_check.cpp est qu’il génère le paquet PING DoublePulsar Trans2 à l’aide d’une structure plutôt que d’une chaîne hexadécimale SMB codée en dur que j’ai extraite d’un échantillon Wannacry. Une autre différence est que ce programme génère dynamiquement le paquet TreeConnect plutôt que d’utiliser celui codé en dur présent dans l’échantillon Wannacry. Le paquet ping généré par ce programme vous indiquera si DoublePulsar est installé sur la machine distante.

  • DoublePulsar_structure_exec.cpp – Ce programme envoie 5 paquets SMB : 1 de négociation SMB, 1 d’ouverture de session, 1 de connexion d’arborescence, 1 paquet PING Trans2 SESSION_SETUP DoublePulsar et 1 paquet d’exécution Trans2 SESSION_SETUP DoublePulsar. La différence avec Doublepulsar_UploadShellcode.cpp est qu’il génère le paquet d’exécution Trans2 DoublePulsar à l’aide d’une structure plutôt que d’une chaîne hexadécimale SMB codée en dur extraite d’un échantillon Wannacry.

  • Doublepulsar_UploadDLL.cpp – Ce programme est destiné aux DLL. Il envoie 4 paquets SMB avec les données DLL dans les paquets Trans2 SMB : 1 de négociation, 1 d’ouverture de session, 1 de connexion d’arborescence, 1 requête PING Trans2 SESSION_SETUP et un paquet d’exécution Trans2 SESSION_SETUP. Le paquet de requête PING Trans2 SESSION_SETUP est envoyé pour obtenir la signature SMB dans le paquet de réponse Trans2 SESSION_SETUP. Cette signature est traitée par le calculateur de clé XOR DoublePulsar. Le programme lit ensuite un fichier DLL et le combine avec un shellcode noyau 64 bits et un shellcode espace utilisateur pour exécuter la DLL, puis applique un XOR sur le tampon avec la clé XOR DoublePulsar calculée à partir de la signature SMB. Un paquet est généré en allouant de la mémoire, en copiant le paquet Trans2, en modifiant les valeurs nécessaires au fonctionnement de la transaction SMB (UserID, TreeID, TotalDataCount, DataCount, ByteCount), puis en copiant les données XORées (shellcode noyau + DLL) à la fin et en les envoyant par boucle par paquets de 4096 octets à DoublePulsar. Longueur totale du paquet = 4178. 4096 correspondent aux données chiffrées par XOR. L’implémentation avec les structures SMB & TRANSACTION2 sera également faite dans les versions futures.

  • Doublepulsar_UploadShellcode.cpp – Ce programme envoie 5 paquets SMB : 1 de négociation, 1 d’ouverture de session, 1 de connexion d’arborescence, 1 paquet PING Trans2 SESSION_SETUP et 1 paquet d’exécution Trans2 SESSION_SETUP. Le paquet de requête Trans2 SESSION_SETUP est envoyé pour obtenir la signature SMB dans le paquet de réponse TRANS2 SESSION_SETUP. Cette signature est traitée par le calculateur de clé XOR DoublePulsar. Le programme copie ensuite le shellcode noyau et un shellcode exemple depuis un tampon, applique un XOR sur le tampon avec la clé XOR DoublePulsar calculée à partir de la signature SMB. Un paquet est généré en allouant de la mémoire, en copiant le paquet d’exécution Trans2, en modifiant les valeurs nécessaires au fonctionnement de la transaction SMB (UserID, TreeID, TotalDataCount, DataCount, ByteCount), puis en copiant les paramètres SESSION_SETUP et 4096 octets de données shellcode XORées à la fin, et en l’envoyant à une longueur totale de 4178 octets à DoublePulsar. Longueur totale du paquet = 4178. La longueur NetBIOS sera de 4174 car l’en-tête NetBIOS ne compte pas lui-même dans la taille. 12 octets de ce paquet sont destinés aux paramètres SESSION_SETUP de DoublePulsar. 4096 correspondent aux données chiffrées par XOR. Dans une version future, les structures SMB & TRANSACTION2 seront utilisées.

UploadShellcode

  • Shellcode généré à partir de – zerosum0x0 a écrit un shellcode personnalisé pour ETERNALBLUE qui pourrait être réutilisé pour DOUBLEPULSAR, avec une petite modification. Comme la réécriture d’appel système dans le shellcode copié était inutile pour ce cas d’utilisation, nous l’avons annulée :
    ;%define SYSCALL_OVERWRITE ; pour s’exécuter à IRQL de processus dans syscall
    recompiler avec : nasm -w-other -o >(xxd -p -c 16 | sed 's/../\x&/g') external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
    https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
    https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x64.asm
    https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x86.asm
    https://www.rapid7.com/blog/post/2019/10/02/open-source-command-and-control-of-the-doublepulsar-implant/

  • DoublePulsar_UploadExe.cpp – Ce programme est destiné aux exécutables. L’exécutable est lu en mémoire et placé dans une DLL de lanceur Wannacry, puis envoyé via DoublePulsar. 1 paquet de négociation, 1 d’ouverture de session, 1 de connexion d’arborescence, 1 paquet Trans2 « Ping » et plusieurs paquets Trans2 « exec » SESSION_SETUP. Le paquet de requête Trans2 Ping est envoyé pour obtenir la signature SMB dans le paquet de réponse Trans2. Cette signature est traitée par le calculateur de clé XOR DoublePulsar. Ensuite, le programme lit un fichier EXE et le combine avec un shellcode noyau 64 bits, un shellcode espace utilisateur et un fichier DLL squelette, puis applique un XOR sur le tampon avec la clé XOR DoublePulsar calculée à partir de la signature SMB. Un paquet est généré en allouant de la mémoire, en copiant le paquet d’exécution Trans2, en modifiant les valeurs nécessaires au fonctionnement de la transaction SMB (UserID, TreeID, TotalDataCount, DataCount, ByteCount), puis en copiant les données XORées (shellcode noyau + DLL + exécutable) à la fin et en les envoyant par boucle par paquets de 4096 octets à DoublePulsar. Longueur totale du paquet = 4178. La longueur NetBIOS sera de 4174 car l’en-tête NetBIOS ne compte pas lui-même dans la taille. 12 octets de ce paquet sont destinés aux paramètres SESSION_SETUP de DoublePulsar. 4096 correspondent aux données chiffrées par XOR.

Module Metasploit

Création d’un module Metasploit personnalisé que j’ai rendu fonctionnel en utilisant le module DoublePulsar RCE open source de Metasploit.

J’ai modifié la logique pour permettre la génération d’une DLL, la fusionner avec le shellcode noyau x64 (préfixé) que j’ai emprunté à Wannacry, afin de permettre à DoublePulsar d’exécuter la DLL.

msfconsole

Code éducatif supplémentaire

Le dépôt contient également les éléments suivants à des fins éducatives et NE sont PAS pris en charge par moi :

  • Script Python de téléchargement de DLL DoublePulsar x86/x64

  • Binaire EternalBlue tout-en-un

  • Code assembleur multi-architecture de file d’attente APC du noyau et code noyau Windows x86/x64 multi-architecture Ring 0 vers Ring 3 via APC en file d’attente

  • Shellcode de charge utile du noyau EternalBlue x64/x86 de worawit

  • Fichier de rejeu Eternalblue

Télécharger l’outil
  • EternalBlue.cpp – Ce programme envoie plusieurs paquets SMB : Négociation, SessionSetup, TreeConnect et plusieurs paquets NT trans et Trans2. Ces paquets NT trans sont malformés et préparent l’exploit en mémoire sur la machine victime. D’autres paquets SMB vides ou contenant des espaces sont envoyés à la victime via plusieurs sockets sur le même port de la victime. La majeure partie de la charge utile base64 d’EternalBlue est envoyée via le socket 1, sur lequel les paquets de négociation, SessionSetup et TreeConnect ont été envoyés. Ensuite, 20 autres sockets sont créés et des données sont envoyées sur ces sockets (socket 3 à socket 21). Puis DoublePulsar est envoyé sur les sockets 3 à 21. Les sockets sont ensuite fermés par le programme, ce qui déclenche EternalBlue et DoublePulsar sur la machine victime. Une demande de déconnexion SMB et de déconnexion de session est ensuite envoyée, et la connexion se ferme. Cet exploit fonctionne et a été testé sur Windows 7 x64. La porte dérobée a mis environ 5 secondes pour devenir pleinement opérationnelle, comme cela a déjà été rapporté dans les analyses d’EternalBlue sur Internet. Plusieurs tentatives d’exploitation peuvent être nécessaires. Cependant, il y a actuellement un bogue concernant les TreeID et UserID qui ne sont pas correctement définis dans les paquets ; ce sera corrigé dans une version ultérieure. Cela fonctionnera sur des machines récemment allumées car les TreeID et UserID sont définis sur les valeurs par défaut. Ces paquets devront voir leurs valeurs TreeID et UserID mises à jour car elles sont actuellement définies sur les valeurs par défaut « 08 00 ». EternalBlue EternalBlue_cmd eternalbluepackets