HardHat C2

HardHat es un framework de comando y control (C2) multiusuario basado en C# .NET diseñado para ayudar en ejercicios de red team y pruebas de penetración. Su objetivo es mejorar la calidad de vida durante los ejercicios al proporcionar un framework C2 robusto y fácil de usar.
HardHat tiene tres componentes principales:
- Un teamserver ASP.NET
- Un cliente Blazor .NET
- Implantes basados en C# integrados
- Soporte para implantes de terceros en otros idiomas
La documentación completa está disponible en https://docs.hardhat-c2.net/.
NOTA: HardHat está en una versión Alpha; tendrá errores, características faltantes y ocurrirán cosas inesperadas. Gracias por probarlo y por favor reporte cualquier problema o característica faltante para que puedan ser solucionados.
Comunidad
Únete a nuestra comunidad de Discord para hablar sobre HardHat C2, programación, red teaming y temas generales de ciberseguridad. También es un excelente lugar para pedir ayuda, reportar errores o nuevas características, y mantenerse al día con las últimas novedades.
¡Las contribuciones de código son bienvenidas! Siéntete libre de enviar solicitudes de características, pull requests, o enviarme tus ideas en Discord.
Características
Soporte de Activos Personalizados
- Los activos son los implantes y los plugins asociados para el servidor de equipo y el cliente. Para ver los disponibles y aprender a crear más, consulte el HardHat Toolbox
Servidor de equipo y Cliente
- Cuentas de operador individuales con control de acceso basado en roles (RBAC)
- Permite la personalización de cuentas
- Permite acceso restringido a funciones específicas (por ejemplo, rol de invitado solo de lectura, aprobación de opsec del líder de equipo (WIP))
- Managers (Listeners)
- Generación dinámica de payloads (EXE, DLL, shellcode, comando de PowerShell)
- Creación y edición de perfiles C2 sobre la marcha en el cliente
- Personalización de la generación de payloads
- Tiempo de sueño/jitter
- Fecha de eliminación
- Horas de trabajo
- Tipo (EXE, DLL, shellcode, comando de PowerShell)
- Comandos incluidos (WIP)
- Opción para ejecutar ConfuserEx
- Carga y descarga de archivos
- Vista de gráficos
- GUI de explorador de archivos
- Registro de eventos
- Registro JSON para eventos y tareas
- Seguimiento de botín
- Seguimiento de Indicadores de Compromiso (IOC)
- Proxies pivot (SOCKS 4a, reenvíos de puertos)
- Almacén de credenciales
- Historial de comandos con autocompletado
- Comando de ayuda detallada
- Comando de terminal bash interactiva si el cliente está en Linux o PowerShell en Windows
- Permite el análisis y registro automáticos de comandos de terminal como proxychains
- Almacenamiento persistente en base de datos de elementos del servidor de equipo (cuentas de usuario, gestores, ingenieros, eventos, tareas, credenciales, descargas, cargas, etc.)
- Seguimiento de entidades de reconocimiento (rastrea información sobre usuarios/dispositivos, metadatos aleatorios según sea necesario)
- Archivos compartidos para algunos comandos (consulte la página del servidor de equipo para más detalles)
- Ventana de interacción basada en pestañas para emitir comandos
- Opción de salida basada en tablas para algunos comandos (por ejemplo,
ls, ps, etc.)
- Análisis automático de la salida de Seatbelt para crear 'entidades de reconocimiento' para referencia conveniente

Ingenieros
- Implante de framework C# .NET para dispositivos Windows (actualmente solo compatible con CLR/.NET 4)
- Solo un implante por ahora, pero se espera agregar más
- Se puede generar como EXE, DLL, shellcode o stager de PowerShell
- Cifrado RC4 de la memoria y el montón del payload durante el sueño (solo EXE/DLL)
- Cifrado AES de toda la comunicación de red
- Integración de ConfuserEx para ofuscación
- Comunicación HTTP, HTTPS, TCP, SMB
- TCP y SMB pueden funcionar peer-to-peer (P2P) en configuraciones bind o reverse
- Clave única por implante generada en tiempo de compilación
- Múltiples URI de callback según el perfil C2
- Integración de P/Invoke y D/Invoke para llamadas a la API de Windows
- Soporte SOCKS 4a
- Reenvío de puertos inverso y reenvíos de puertos
- Todos los comandos se ejecutan como trabajos asíncronos y cancelables
- Opción para ejecutar comandos de forma síncrona, si se desea
- Ejecución de ensamblado en línea y ejecución de shellcode en línea
- Inyección de DLL
- Ejecutar ensamblado e integración con Mimikatz
- Mimikatz no está integrado en el implante, sino que se envía cuando se emiten comandos específicos
- Varias herramientas de enumeración local y de red
- Comandos de manipulación de tokens
- Robo de máscara de token (WIP)
- Comandos de movimiento lateral
- Jump (psexec, wmi, wmi-ps, winrm, dcom)
- Ejecución remota (WIP)
- Interfaz de análisis antimalware (AMSI) y parcheo de seguimiento de eventos para Windows (ETW)
- PowerShell no administrado
- Almacén de scripts permite cargar múltiples scripts a la vez
- Generar e inyectar
- Run, execute y shell

Primeros Pasos
Instalación
Docker
- Instalar Docker y Docker Compose
- Ejecutar
docker compose up -d
- Opcionalmente, proporcione
HARDHAT_ADMIN_USERNAME y/o HARDHAT_ADMIN_PASSWORD como variables de entorno; si se omiten, el nombre de usuario administrador predeterminado y la contraseña generada aleatoriamente se escribirán en los registros del servidor de equipo en la primera ejecución
- Navegue a https://localhost:7096/ en su navegador
Manual
- Instalar .NET 7 SDK de Microsoft
- Ejecute
dotnet run desde el directorio .\TeamServer para compilar e iniciar el servidor de equipo
- Ejecute
dotnet run https://<TEAMSERVER_HOST>:<TEAMSERVER_PORT> desde el directorio HardHatC2Client
- Por ejemplo, asumiendo que su servidor de equipo se ejecuta en el mismo host y puerto predeterminado:
dotnet run https://127.0.0.1:5000
- Navegue a https://localhost:7096/ en su navegador
Para configurar la dirección de escucha del servidor de equipo (es decir, donde se conectarán los clientes), edite .\TeamServer\Properties\LaunchSettings.json y cambie "applicationUrl": "https://127.0.0.1:5000" a la ubicación y puerto deseados.
Configuración
- Inicie sesión en la interfaz web del cliente usando el nombre de usuario y la contraseña configurados con la variable de entorno o impresos en STDOUT por el servidor de equipo
- Navegue a la página de Configuración y cree una nueva cuenta de usuario
- Si tiene éxito, aparecerá un mensaje; luego puede iniciar sesión con esa cuenta para acceder al cliente completo
Seguimiento de versiones
- Alpha 0.2 Release - 7/6/23
- Alpha Release - 3/29/23