Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
HashSiphon — Extrae el hash NetNTLMv2 del usuario actual mediante proxy de autenticación HTTP, evitando llamadas directas a SSPI; la v2 delega la autenticación al servicio BITS para romper la atribución del proceso. | Kitploit
Herramientas/GitHubGitHub/ivancabrera02/hashsiphon
Herramientas DefensivasAtaques de ContraseñasRecopilación de InformaciónPost-ExplotaciónPruebas de PenetraciónRed Teaming
GitHubivancabrera02/hashsiphon

HashSiphon

Extrae el hash NetNTLMv2 del usuario actual mediante proxy de autenticación HTTP, evitando llamadas directas a SSPI; la v2 delega la autenticación al servicio BITS para romper la atribución del proceso.

Ver Repositorio
3256hace 7 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

HashSiphon

Extracción de hash NTLM mediante proxy de autenticación a nivel de capa HTTP, cero llamadas SSPI desde el proceso atacante.

HashSiphon extrae el hash NetNTLMv2 del usuario actual manipulando los flujos de autenticación HTTP en lugar de llamar directamente a las API SSPI. Incluye dos variantes: v1 enruta la autenticación NTLM a través de la pila HTTP de .NET dentro del mismo proceso, y v2 delega la autenticación por completo al servicio BITS (svchost.exe) en un PID diferente, rompiendo por completo la atribución a nivel de proceso.

Por qué esto importa

Todas las herramientas conocidas de autoextracción de hash NTLM Internal Monologue, scripts SSPI manuales y sus derivados llaman a AcquireCredentialsHandle → InitializeSecurityContext → AcceptSecurityContext desde el propio proceso del atacante. Los EDR enganchan estas funciones SSPI y marcan la cadena de llamadas.

HashSiphon toma un camino fundamentalmente diferente:

AspectoInternal MonologueHashSiphon v1HashSiphon v2
Llamadas SSPI desde el PID atacante4+ llamadas directas0 directas (WinHTTP llama internamente)0 en cualquier proceso que poseamos
Proceso de autenticaciónPID atacantePID atacante (vía pila HTTP)svchost.exe (servicio BITS)
Importaciones de API de seguridadSe requieren importaciones de DLL SSPINinguna en nuestro códigoNinguna en nuestro código
Superficie de detecciónHooks SSPI, patrones de llamadas APITráfico HTTP de loopbackTrabajo BITS + tráfico de loopback
Atribución de procesoPID atacantePID atacanteRota, PID completamente diferente

Cómo funciona

Ambas variantes comparten el mismo núcleo: un servidor TCP mínimo en 127.0.0.1 que habla lo justo de HTTP para realizar un intercambio de desafío-respuesta NTLM, con un desafío controlado de 8 bytes para que el hash capturado sea crackeable offline.

v1 — Autenticación HTTP propia (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 servidor TCP en C# mediante Add-Type, se enlaza a 127.0.0.1:0 (puerto asignado por el SO)
  2. El cliente se conecta con HttpWebRequest + CredentialCache.DefaultCredentials
  3. El servidor responde HTTP 401 con WWW-Authenticate: NTLM para desencadenar la negociación
  4. WinHTTP envía NTLM Type 1 → el servidor responde con un Type 2 manipulado (desafío controlado) → WinHTTP envía Type 3
  5. El servidor analiza el Type 3 y extrae el hash NetNTLMv2

Contrapartida: WinHTTP llama internamente a SSPI dentro del mismo PID, sin importaciones directas, pero la pila de llamadas sigue remontándose a nosotros.

v2 — Proxy del servicio 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. El mismo servidor TCP en C# se inicia en un Runspace de PowerShell en segundo plano
  2. Start-BitsTransfer crea un trabajo de descarga apuntando a http://127.0.0.1:<port>/hashsiphon.bin
  3. El servicio BITS (svchost.exe, un PID completamente diferente) se conecta a nuestro servidor
  4. BITS se autentica con las credenciales del propietario del trabajo, el intercambio NTLM es capturado por nuestro servidor
  5. El servidor devuelve HTTP 200 con un cuerpo para que BITS considere la transferencia exitosa
  6. Hash extraído del mensaje Type 3

Avance clave: Nuestro proceso nunca llama a SSPI, ni directamente, ni a través de WinHTTP, ni en absoluto. Todo el cálculo NTLM ocurre en svchost.exe. Los hooks SSPI del EDR ven la pila de llamadas en el proceso del servicio BITS, no en el nuestro.

Uso

Requisitos

  • Windows 10/11
  • PowerShell 5.1+
  • Privilegios de usuario estándar (no se requiere admin)
  • Servicio BITS en ejecución (predeterminado en Windows)

Ejecutar v1

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

Ejecutar v2

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

Salida esperada (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     |
  +----------------------------------------------------------+

Comportamiento de respaldo

Si BITS falla (servicio deshabilitado, módulo no disponible), v2 recurre automáticamente a lanzar un proceso hijo powershell.exe con Invoke-WebRequest -UseDefaultCredentials. Esto sigue logrando la separación de PID, aunque el proceso hijo es más visible que BITS.

Descargar herramienta