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
HashSiphon — Extrait le hash NetNTLMv2 de l'utilisateur actuel via un proxy d'authentification HTTP, évitant les appels SSPI directs ; la v2 délègue l'authentification au service BITS pour rompre l'attribution du processus. | Kitploit
Outils/GitHubGitHub/ivancabrera02/hashsiphon
Outils DéfensifsAttaques de Mots de PasseCollecte d'InformationsPost-ExploitationTests d'IntrusionRed Teaming
GitHubivancabrera02/hashsiphon

HashSiphon

Extrait le hash NetNTLMv2 de l'utilisateur actuel via un proxy d'authentification HTTP, évitant les appels SSPI directs ; la v2 délègue l'authentification au service BITS pour rompre l'attribution du processus.

Voir le dépôt
3256il y a 7 joursPas 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

HashSiphon

Extraction de hash NTLM via un proxy d'authentification au niveau de la couche HTTP, zéro appel SSPI depuis le processus de l'attaquant.

HashSiphon extrait le hash NetNTLMv2 de l'utilisateur courant en manipulant les flux d'authentification HTTP au lieu d'appeler directement les API SSPI. Il est livré en deux variantes : v1 achemine l'authentification NTLM via la pile HTTP de .NET au sein du même processus, et v2 délègue entièrement l'authentification au service BITS (svchost.exe) dans un PID différent, brisant ainsi toute attribution au niveau du processus.

Pourquoi c'est important

Tous les outils connus d'auto-extraction de hash NTLM Internal Monologue, les scripts SSPI manuels et leurs dérivés appellent AcquireCredentialsHandle → InitializeSecurityContext → AcceptSecurityContext depuis le processus de l'attaquant lui-même. Les EDR hookent ces fonctions SSPI et signalent la chaîne d'appels.

HashSiphon emprunte une voie fondamentalement différente :

AspectInternal MonologueHashSiphon v1HashSiphon v2
Appels SSPI depuis le PID de l'attaquant4+ appels directs0 direct (WinHTTP appelle en interne)0 dans tout processus que nous possédons
Processus d'authentificationPID de l'attaquantPID de l'attaquant (via la pile HTTP)svchost.exe (service BITS)
Imports d'API de sécuritéImports de DLL SSPI requisAucun dans notre codeAucun dans notre code
Surface de détectionHooks SSPI, motifs d'appels APITrafic HTTP en loopbackTâche BITS + trafic en loopback
Attribution du processusPID de l'attaquantPID de l'attaquantBrisée, PID entièrement différent

Comment ça fonctionne

Les deux variantes partagent le même cœur : un serveur TCP minimal sur 127.0.0.1 qui parle juste assez HTTP pour effectuer un échange challenge-réponse NTLM, avec un challenge contrôlé de 8 octets afin que le hash capturé soit cassable hors ligne.

v1 — Auto-authentification HTTP (HashSiphon.ps1)

root@kitploit:~
┌──────────────────────────┐
│     PowerShell (PID X)   │
│                          │
│  ┌────────────────────┐  │          ┌──────────────────────┐
│  │ TCP Server (C#)    │◄─┼──────────┤ HttpWebRequest +     │
│  │ Loopback :random   │  │  HTTP    │ DefaultCredentials   │
│  │                    │──┼──────────►                      │
│  │ 1. Send 401+NTLM   │  │  NTLM    │ WinHTTP auto-auths   │
│  │ 2. Send Type 2     │  │  Type    │ using current user's │
│  │ 3. Capture Type 3  │  │  1/2/3   │ credentials          │
│  │ 4. Extract hash    │  │          │                      │
│  └────────────────────┘  │          └──────────────────────┘
└──────────────────────────┘
  1. Compile un serveur TCP C# via Add-Type, se lie à 127.0.0.1:0 (port attribué par l'OS)
  2. Le client se connecte avec HttpWebRequest + CredentialCache.DefaultCredentials
  3. Le serveur répond HTTP 401 avec WWW-Authenticate: NTLM pour déclencher la négociation
  4. WinHTTP envoie NTLM Type 1 → le serveur répond avec un Type 2 forgé (challenge contrôlé) → WinHTTP envoie Type 3
  5. Le serveur analyse le Type 3 et extrait le hash NetNTLMv2

Compromis : WinHTTP appelle SSPI en interne au sein du même PID, aucun import direct, mais la pile d'appels remonte toujours jusqu'à nous.

v2 — Proxy du service BITS (HashSiphonV2.ps1)

root@kitploit:~
┌─────────────────────┐         ┌───────────────────────────┐
│  PowerShell (PID X) │         │  svchost.exe (PID Y)      │
│                     │         │  BITS Service             │
│  ┌───────────────┐  │  HTTP   │                           │
│  │ TCP Server    │◄─┼─────────┤  BITS downloads from our  │
│  │ (Background   │  │  NTLM   │  server, auto-authenticates│
│  │  Runspace)    │──┼─────────►  using job owner's creds   │
│  └───────────────┘  │  Type   │                           │
│                     │  1/2/3  │  SSPI calls happen HERE,  │
│  Start-BitsTransfer─┼────────►│  not in PID X             │
│  (Trigger only)     │  COM    │                           │
└─────────────────────┘         └───────────────────────────┘
          │
          └── Our process: TcpListener + Start-BitsTransfer
              Zero SSPI. Zero security API imports.
  1. Le même serveur TCP C# démarre dans un Runspace PowerShell en arrière-plan
  2. Start-BitsTransfer crée une tâche de téléchargement pointant vers http://127.0.0.1:<port>/hashsiphon.bin
  3. Le service BITS (svchost.exe, un PID complètement différent) se connecte à notre serveur
  4. BITS s'authentifie avec les identifiants du propriétaire de la tâche, l'échange NTLM est capturé par notre serveur
  5. Le serveur renvoie HTTP 200 avec un corps afin que BITS considère le transfert comme réussi
  6. Le hash est extrait du message Type 3

Percée : Notre processus n'appelle jamais SSPI, ni directement, ni via WinHTTP, jamais. L'intégralité du calcul NTLM se produit dans svchost.exe. Les hooks SSPI de l'EDR voient la pile d'appels dans le processus du service BITS, pas dans le nôtre.

Utilisation

Prérequis

  • Windows 10/11
  • PowerShell 5.1+
  • Privilèges d'utilisateur standard (aucun administrateur requis)
  • Service BITS en cours d'exécution (par défaut sur Windows)

Exécution de v1

root@kitploit:~
powershell -ExecutionPolicy Bypass -File HashSiphon.ps1

Exécution de v2

root@kitploit:~
powershell -ExecutionPolicy Bypass -File HashSiphonV2.ps1

Sortie attendue (v2)

root@kitploit:~
  [*] Compiling HashSiphon v2 server...
  [+] Server compiled

  HashSiphon v2.0 - BITS Service Proxy Authentication
  Auth by svchost.exe (BITS), not our process

  [1] NTLM HTTP server ready on 127.0.0.1:52847
  [2] Controlled challenge: 1122334455667788
  [3] Triggering BITS transfer to our server...
  [4] BITS transfer initiated

  [+] User:        ivan
  [+] Domain:      DESKTOP-ABCDEF
  [+] NT response: 280 bytes (NTLMv2)

  +----------------------------------------------------------+
  |     NetNTLMv2 HASH - Extracted via BITS service proxy!   |
  +----------------------------------------------------------+
  |  hashcat -m 5600 | john --format=netntlmv2               |
  +----------------------------------------------------------+

  ivan::DESKTOP-ABCDEF:1122334455667788:<NTProofStr>:<ClientBlob>

  +----------------------------------------------------------+
  |  ATTRIBUTION ANALYSIS                                    |
  +----------------------------------------------------------+
  |  Our PID:      844  (PowerShell)                         |
  |  Auth by:      BITS service (svchost.exe, PID 5500)      |
  |  SSPI calls:   Zero from PID 844                         |
  |  Our APIs:     TcpListener + Start-BitsTransfer only     |
  +----------------------------------------------------------+

Comportement de repli

Si BITS échoue (service désactivé, module indisponible), v2 bascule automatiquement vers le lancement d'un processus enfant powershell.exe avec Invoke-WebRequest -UseDefaultCredentials. Cela permet tout de même d'obtenir la séparation des PID, bien que le processus enfant soit plus visible que BITS.

Télécharger l’outil