Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
HashSiphon — Estrae l'hash NetNTLMv2 dell'utente corrente tramite proxy di autenticazione HTTP, evitando chiamate dirette a SSPI; la v2 delega l'autenticazione al servizio BITS per interrompere l'attribuzione del processo. | Kitploit
Strumenti/GitHubGitHub/ivancabrera02/hashsiphon
Strumenti DifensiviAttacchi alle PasswordRaccolta InformazioniPost-ExploitPenetration TestingRed Teaming
GitHubivancabrera02/hashsiphon

HashSiphon

Estrae l'hash NetNTLMv2 dell'utente corrente tramite proxy di autenticazione HTTP, evitando chiamate dirette a SSPI; la v2 delega l'autenticazione al servizio BITS per interrompere l'attribuzione del processo.

Vedi Repository
32567 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

HashSiphon

Estrazione di hash NTLM tramite proxy di autenticazione a livello HTTP, zero chiamate SSPI dal processo dell'attaccante.

HashSiphon estrae l'hash NetNTLMv2 dell'utente corrente manipolando i flussi di autenticazione HTTP invece di chiamare direttamente le API SSPI. Viene distribuito in due varianti: v1 instrada l'autenticazione NTLM attraverso lo stack HTTP di .NET all'interno dello stesso processo, mentre v2 delega completamente l'autenticazione al servizio BITS (svchost.exe) in un PID diverso, rompendo del tutto l'attribuzione a livello di processo.

Perché è importante

Ogni strumento noto di auto-estrazione di hash NTLM Internal Monologue, script SSPI manuali e loro derivati chiama AcquireCredentialsHandle → InitializeSecurityContext → AcceptSecurityContext dal processo dell'attaccante stesso. Gli EDR agganciano queste funzioni SSPI e segnalano la catena di chiamate.

HashSiphon segue un percorso fondamentalmente diverso:

AspettoInternal MonologueHashSiphon v1HashSiphon v2
Chiamate SSPI dal PID dell'attaccante4+ chiamate dirette0 dirette (WinHTTP chiama internamente)0 in qualsiasi processo di nostra proprietà
Processo di autenticazionePID dell'attaccantePID dell'attaccante (tramite stack HTTP)svchost.exe (servizio BITS)
Import di API di sicurezzaImport di DLL SSPI richiestiNessuno nel nostro codiceNessuno nel nostro codice
Superficie di rilevamentoHook SSPI, pattern di chiamate APITraffico HTTP su loopbackJob BITS + traffico su loopback
Attribuzione del processoPID dell'attaccantePID dell'attaccanteRotta, PID completamente diverso

Come funziona

Entrambe le varianti condividono lo stesso nucleo: un server TCP minimale su 127.0.0.1 che parla appena l'HTTP necessario per eseguire uno scambio challenge-response NTLM, con una challenge controllata di 8 byte in modo che l'hash catturato sia crackabile offline.

v1 — Auto-autenticazione 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. Compila un server TCP C# tramite Add-Type, si associa a 127.0.0.1:0 (porta assegnata dal sistema operativo)
  2. Il client si connette con HttpWebRequest + CredentialCache.DefaultCredentials
  3. Il server risponde HTTP 401 con WWW-Authenticate: NTLM per avviare la negoziazione
  4. WinHTTP invia NTLM Type 1 → il server risponde con un Type 2 craftato (challenge controllata) → WinHTTP invia Type 3
  5. Il server analizza il Type 3 ed estrae l'hash NetNTLMv2

Compromesso: WinHTTP chiama internamente SSPI all'interno dello stesso PID, nessun import diretto, ma lo stack di chiamate risale comunque fino a noi.

v2 — Proxy del servizio 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. Lo stesso server TCP C# viene avviato in un Runspace PowerShell in background
  2. Start-BitsTransfer crea un job di download che punta a http://127.0.0.1:<port>/hashsiphon.bin
  3. Il servizio BITS (svchost.exe, un PID completamente diverso) si connette al nostro server
  4. BITS si autentica con le credenziali del proprietario del job, lo scambio NTLM viene catturato dal nostro server
  5. Il server restituisce HTTP 200 con un body in modo che BITS consideri il trasferimento riuscito
  6. Hash estratto dal messaggio Type 3

Svolta: Il nostro processo non chiama mai SSPI, né direttamente, né tramite WinHTTP, né in alcun modo. L'intero calcolo NTLM avviene in svchost.exe. Gli hook SSPI degli EDR vedono lo stack di chiamate nel processo del servizio BITS, non nel nostro.

Utilizzo

Requisiti

  • Windows 10/11
  • PowerShell 5.1+
  • Privilegi utente standard (nessun admin richiesto)
  • Servizio BITS in esecuzione (predefinito su Windows)

Esecuzione di v1

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

Esecuzione di v2

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

Output previsto (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     |
  +----------------------------------------------------------+

Comportamento di fallback

Se BITS fallisce (servizio disabilitato, modulo non disponibile), v2 ripiega automaticamente sull'avvio di un processo figlio powershell.exe con Invoke-WebRequest -UseDefaultCredentials. Questo ottiene comunque la separazione dei PID, sebbene il processo figlio sia più visibile rispetto a BITS.

Scarica lo strumento