
PowerShell para C2 do Slack
Este módulo PowerShell inclui várias funções que utilizam a API do Slack para criar um canal de comando e controle. A função principal, Start-Shell, conecta-se a um canal do Slack especificado pelo usuário e autentica usando um token de autenticação da API fornecido para uma determinada equipe e usuário do Slack. Qualquer comando digitado no canal será então executado, em PowerShell, no host.
O projeto SlackShell requer PowerShell v3 ou superior devido ao uso de Invoke-RestMethod para chamadas de API. O desenvolvimento futuro continuará a usar cmdlets e funções atuais do PowerShell. No entanto, uma versão para PowerShell v2 foi criada em SlackShell-Poshv2.psm1.
Scripts PS adicionais podem ser importados para a sessão em execução, primeiro enviando-os para o canal do Slack. O recurso de importação baixará os arquivos, que são hospedados em https://slack-files.com por padrão, e os importará em memória. Os arquivos não tocam o disco. Da mesma forma, o recurso de download pode ser usado para salvar uma cópia local de qualquer arquivo no disco.
Arquivos locais podem ser enviados para o canal do Slack através da API usando o recurso de upload.
Se necessário, um processo PS separado pode ser gerado para executar um comando que utiliza o cmdlet integrado Invoke-Command.
Inicia o monitoramento de um canal do Slack para comandos a serem executados no PowerShell. Conecta-se ao canal do Slack a cada $sleep segundos e puxa todos os novos comandos. Os comandos serão executados no host em PowerShell.
Envia uma mensagem para o canal do Slack específico através da API. As mensagens são enviadas com um cabeçalho de texto, sendo o corpo da mensagem um anexo do Slack.
Inicia um novo processo e executa um comando em PowerShell no host. Utiliza o método Start-Job no PowerShell para gerar um novo processo, aguarda a conclusão do trabalho e retorna a saída.
Executa um comando em PowerShell no host no contexto atual do processo em execução e retorna a saída.
Retorna todas as mensagens em um canal específico do Slack, do período mais antigo até o presente. As mensagens são retornadas em formato JSON, conforme as especificações da API.
Usa uma chamada de API do Slack para testar se o token de API fornecido é válido.
Usa uma chamada de API do Slack para retornar uma lista de arquivos atualmente hospedados no canal do Slack.
Atualiza a lista de arquivos e, em seguida, baixa o arquivo especificado para a memória, cria um novo módulo e importa esse módulo. Comandos específicos desse módulo podem então ser inseridos diretamente no canal do Slack. O arquivo baixado não toca o disco. Esta função deve ser considerada em Beta enquanto testes adicionais estão ocorrendo. Alguns módulos se comportam de forma errática
Atualiza a lista de arquivos e, em seguida, baixa o arquivo especificado para o disco. Um caminho de armazenamento adicional pode ser incluído; o padrão é o local atual.
Envia um arquivo local para o canal do Slack.
O token de API usado para autenticação. Este token representa um usuário específico em uma equipe específica do Slack. Mais informações podem ser encontradas aqui: https://api.slack.com/custom-integrations/legacy-tokens
O identificador do canal que especifica qual canal do Slack na equipe será usado. Todo o texto neste canal será então processado como comandos no host quando Start-Shell for executado. O ID do canal pode ser encontrado na URL ao acessar a página do canal a partir do site do Slack baseado na Web.
Exemplo: https://slackteam1.slack.com/messages/ABC123456. O ID do canal é "ABC123456".
Import-Module ./SlackShell.psm1
Start-Shell -Token "xoxp-175828824580-175707545555-176600001223-826315a84e533c482bb7e20e8312fh45k" -Channel "ABC123456" -Sleep 5
Entre no mesmo canal do Slack como um usuário diferente daquele usado para criar o token. Qualquer coisa escrita no canal como o usuário diferente será executada no host sob o mesmo contexto de usuário local usado para iniciar o script. Alternativamente, "runjob" pode ser usado para executar comandos em um processo PowerShell recém-criado.
Fecha o shell e a conexão.
Altera o diretório no contexto do processo principal. Caminhos relativos podem ser usados (ex.: cd ..)
Altera o tempo de espera.
Lista os arquivos disponíveis no canal do Slack associado.
Importa o arquivo especificado. O arquivo deve ser compartilhado com o canal do Slack que está sendo usado.
Baixa o arquivo especificado para o disco e o armazena no local do parâmetro de caminho opcional. O arquivo deve ser compartilhado com o canal do Slack que está sendo usado.
Envia o arquivo local para o Slack e o compartilha com o canal que está sendo usado.
Executa o comando especificado em um novo processo PowerShell.
A inspiração para trabalhar com a API do Slack em PowerShell é creditada a Warren Frame. Seu repositório foi um ótimo recurso para começar: https://github.com/RamblingCookieMonster/PSSlack
Agradecimentos especiais a @thesubtlety por portar para POSHv2 e adicionar melhorias.