
PowerShell to Slack C2
Ce module PowerShell comprend diverses fonctions qui utilisent l'API Slack pour créer un canal de commande et de contrôle. La fonction principale, Start-Shell, se connecte à un canal Slack spécifié par l'utilisateur et s'authentifie à l'aide d'un jeton d'authentification API fourni pour une équipe et un utilisateur Slack donnés. Toute commande saisie dans le canal sera alors exécutée, en PowerShell, sur l'hôte.
Le projet SlackShell nécessite PowerShell v3 ou supérieur en raison de l'utilisation d'Invoke-RestMethod pour les appels API. Le développement futur continuera à utiliser les applets de commande et fonctions PowerShell actuelles. Cependant, un portage pour PowerShell v2 a été créé dans SlackShell-Poshv2.psm1.
Des scripts PS supplémentaires peuvent être importés dans la session en cours en les téléversant d'abord sur le canal Slack. La fonction d'importation télécharge les fichiers, qui sont hébergés par défaut sur https://slack-files.com, et les importe en mémoire. Les fichiers ne touchent pas le disque. Inversement, la fonction de téléchargement peut être utilisée pour enregistrer une copie locale de n'importe quel fichier sur le disque.
Les fichiers locaux peuvent être téléversés vers le canal Slack via l'API à l'aide de la fonction de téléversement.
Si nécessaire, un processus PS séparé peut être créé pour exécuter une commande qui utilise l'applet de commande Invoke-Command intégrée.
Démarre la surveillance d'un canal Slack pour les commandes à exécuter en PowerShell. Se connecte au canal Slack toutes les $sleep secondes et récupère toutes les nouvelles commandes. Les commandes seront exécutées sur l'hôte en PowerShell.
Envoie un message au canal Slack spécifié via l'API. Les messages sont envoyés avec un en-tête textuel, le corps du message étant une pièce jointe Slack.
Démarre un nouveau processus et exécute une commande en PowerShell sur l'hôte. Utilise la méthode Start-Job en PowerShell pour créer un nouveau processus, attendre la fin du travail et renvoyer la sortie.
Exécute une commande en PowerShell sur l'hôte dans le contexte actuel du processus en cours et renvoie la sortie.
Renvoie tous les messages d'un canal Slack spécifique de la période la plus ancienne à aujourd'hui. Les messages sont renvoyés au format JSON conformément aux spécifications de l'API.
Utilise un appel API Slack pour tester si le jeton API fourni est valide.
Utilise un appel API Slack pour renvoyer une liste des fichiers actuellement hébergés dans le canal Slack.
Actualise la liste des fichiers, puis télécharge le fichier spécifié en mémoire, crée un nouveau module, puis importe ce module. Les commandes spécifiques à ce module peuvent alors être saisies directement dans le canal Slack. Le fichier téléchargé ne touche pas le disque. Cette fonction doit être considérée comme en version bêta pendant que des tests supplémentaires sont en cours. Certains modules se comportent de manière erratique
Actualise la liste des fichiers, puis télécharge le fichier spécifié sur le disque. Un chemin de stockage supplémentaire peut être inclus, par défaut l'emplacement actuel.
Téléverse un fichier local vers le canal Slack.
Le jeton API utilisé pour l'authentification. Ce jeton représente un utilisateur spécifique sur une équipe Slack spécifique. Plus d'informations peuvent être trouvées ici : https://api.slack.com/custom-integrations/legacy-tokens
L'identifiant du canal qui spécifie quel canal Slack de l'équipe sera utilisé. Tout le texte de ce canal sera alors traité comme des commandes sur l'hôte lorsque Start-Shell est exécuté. L'ID du canal se trouve dans l'URL lors de l'accès à la page du canal depuis le site Slack basé sur le Web.
Exemple : https://slackteam1.slack.com/messages/ABC123456. L'ID du canal est "ABC123456".
Import-Module ./SlackShell.psm1
Start-Shell -Token "xoxp-175828824580-175707545555-176600001223-826315a84e533c482bb7e20e8312fh45k" -Channel "ABC123456" -Sleep 5
Rejoignez le même canal Slack en tant qu'utilisateur différent de celui utilisé pour créer le jeton. Tout ce qui est écrit dans le canal en tant qu'utilisateur différent sera exécuté sur l'hôte sous le même contexte utilisateur local que celui utilisé pour démarrer le script. Alternativement, "runjob" peut être utilisé pour exécuter des commandes dans un nouveau processus PowerShell créé.
Ferme le shell et la connexion.
Change le répertoire dans le contexte du processus principal. Les chemins relatifs peuvent être utilisés (par exemple cd ..)
Modifie le temps de veille.
Liste les fichiers disponibles dans le canal Slack associé.
Importe le fichier spécifié. Le fichier doit être partagé avec le canal Slack utilisé.
Télécharge le fichier spécifié sur le disque et le stocke à l'emplacement facultatif du paramètre de chemin. Le fichier doit être partagé avec le canal Slack utilisé.
Téléverse le fichier local vers Slack et le partage avec le canal utilisé.
Exécute la commande spécifiée dans un nouveau processus PowerShell.
L'inspiration pour travailler avec l'API Slack en PowerShell est attribuée à Warren Frame. Son dépôt a été une excellente ressource pour commencer : https://github.com/RamblingCookieMonster/PSSlack
Remerciements particuliers à @thesubtlety pour le portage vers POSHv2 et les améliorations ajoutées.