Infraestructura de comando y control que permite a los Red Teamers ejecutar comandos del sistema en hosts comprometidos a través de Microsoft Teams.
Infiltra datos en etiquetas de extensión ocultas en mensajes de Microsoft Teams y extrae datos incrustando salidas de comandos en URL de imágenes de tarjetas adaptables, lo que activa solicitudes fuera de límites a un servidor C2.
La falta de comunicación directa entre la víctima y el atacante, combinada con el hecho de que la víctima solo envía solicitudes http a los servidores de Microsoft y los antivirus no examinan los archivos de registro de MS Teams, dificulta la detección.
El siguiente video muestra el uso del servidor para controlar dos hosts comprometidos: uno que ejecuta los nuevos Teams en Windows 11 y el otro que ejecuta los antiguos Teams en Windows 10. En el primer caso, el atacante no está en la misma organización que la víctima. .
ConvoC2_Demo.mp4
Nota: En el primer caso, la víctima ya aceptó el chat con el atacante externo, pero en un escenario real donde el atacante inicia el chat con la víctima por primera vez, la víctima necesitaría confirmar el chat con el atacante. Esto no es un problema: debido a que los mensajes se almacenan en caché de todos modos en el archivo de registro, el Los comandos se reciben y ejecutan incluso si la víctima aún no ha visualizado o aceptado el chat..
Servidor
wget tar -xzvf convoC2_server_amd64.tar.gz –one-top-level root@convoC2-server-VPS:~# ./convoC2_server_amd64 -h Uso del servidor convoC2: -t, –msgTimeout Cuánto esperar para la salida del comando ( predeterminado 30 s) -b, –bindIp Vincular dirección IP (predeterminado 0.0.0.0)
Agente
wget tar -xzvf convoC2_agent.tar.gz –one-top-level C:Windows>convoC2_agent.exe -h Uso del agente convoC2: -v, –verbose Registro detallado (falso predeterminado) -s, –server C2 URL del servidor (es decir, -t, –timeout Tiempo de espera de sondeo del archivo de registro de Teams [s] (predeterminado 1) -w, –webhook Teams Webhook POST URL -r, –regex Regex para que coincida con el comando (predeterminado “]*aria-label=”([^”]*)”[^>]*>”)
Para que funcione, necesitarás configurar algunas cosas:
- Crear canal de Teams con webhook entrante de flujo de trabajo: este es el lugar donde se recibirán las tarjetas adaptativas que contienen la salida. Es importante mantener abierta una ventana del navegador con este canal mientras se utiliza el servidor.de lo contrario el servidor no recibirá mensajes de los agentes.
- Obtener identificadores y token de autenticación: Teams inicializa un chat con una POST con los identificadores únicos de la víctima y el atacante en el cuerpo. En la respuesta, se devolverá el threadId en la ruta de la URL del encabezado de Ubicación. El token de portador de la misma solicitud se utiliza para autenticar cuál es el punto final para enviar mensajes. Así que sólo necesitamos tomar estas tres cosas y el servidor se encargará del resto.
- Asegúrese de tener un host público que permita el tráfico HTTP entrante en el puerto 80.
- Teams debe ejecutarse en el host de la víctima; en segundo plano también está bien.
Crear canal de Teams con webhook entrante de flujo de trabajo
En primer lugar, deberá crear un canal de Teams.
Haga clic derecho en los tres puntos, luego haga clic en “Flujos de trabajo”.
En la barra de búsqueda, escriba “Webhook” y haga clic en “Publicar en un canal cuando se reciba una solicitud de webhook”.
Continúe con la configuración predeterminada y finalmente copie la URL.
Empiece por buscar a la víctima.
Después de seleccionar la cuenta de la víctima, con el proxy web interceptando las solicitudes, puede enviar un mensaje ficticio.
Guarde los dos identificadores presentes en la solicitud api/chatsvc/emea/v1/threads y luego DEJE la solicitud. El token de autenticación será el token portador de la misma solicitud.
Esta infraestructura se inspiró en la Equipos de investigación GIFShell hecho por Bobbyrsec.
Inicialmente mi propósito era replicar el problema, pero la solución parecía estar parcialmente solucionada. La investigación implicó inyectar comandos en GIF codificados en Base64, pero estos ya no se mostraban correctamente: en su lugar aparecía un ícono de imagen corrupta en el chat, lo que hacía que la víctima potencialmente comenzara a sospechar.
Después de probar varios métodos, noté que era posible incrustar comandos directamente en mensajes en lugar de GIF o imágenes: Es más probable que enviar varias imágenes genere sospechas en comparación con enviar mensajes simples, ¿verdad? Inicialmente consideré incrustar comandos en etiquetas como , o etiquetas personalizadas, pero todas fueron filtradas. Finalmente, incrustar comandos en el atributo aria-label de etiquetas con display:none tuvo éxito: la víctima solo vería el mensaje, pero el comando oculto en realidad envenenaría el archivo de registro de Teams.
El servidor TUI se ha desarrollado utilizando el fantástico marco Go BubbleTea.
Si encuentra errores o desea mejorar el proyecto, no dude en abrir una solicitud de extracción y estaré encantado de revisar y eventualmente fusionar sus cambios. Todos a corto plazo son:
- Cifrado AES de mensajes
- Keepalive para detectar cuando el agente está muerto
- Versión Powershell del Agente









Leave a Reply