
PowerShell-Slack C2
이 PowerShell 모듈은 Slack API를 활용하여 명령 및 제어 채널을 생성하는 다양한 함수를 포함합니다. 주요 함수인 Start-Shell은 사용자가 지정한 Slack 채널에 연결하고 특정 Slack 팀과 사용자에 대해 제공된 API 인증 토큰을 사용하여 인증합니다. 채널에 입력된 모든 명령은 호스트에서 PowerShell로 실행됩니다.
SlackShell 프로젝트는 API 호출에 Invoke-RestMethod를 사용하므로 PowerShell v3 이상이 필요합니다. 향후 개발은 계속해서 현재 PowerShell cmdlet 및 함수를 사용할 것입니다. 그러나 PowerShell v2용 포트는 SlackShell-Poshv2.psm1에 만들어졌습니다.
추가 PS 스크립트를 먼저 Slack 채널에 업로드한 다음 실행 중인 세션으로 가져올 수 있습니다. 가져오기 기능은 기본적으로 https://slack-files.com 에 호스팅된 파일을 다운로드하고 메모리로 가져옵니다. 파일은 디스크에 닿지 않습니다. 반대로 다운로드 기능을 사용하면 모든 파일의 로컬 사본을 디스크에 저장할 수 있습니다.
로컬 파일은 업로드 기능을 사용하여 API를 통해 Slack 채널에 업로드할 수 있습니다.
필요한 경우, 내장된 Invoke-Command cmdlet을 사용하여 명령을 실행하기 위해 별도의 PS 프로세스를 생성할 수 있습니다.
Slack 채널에서 PowerShell로 실행할 명령을 모니터링하기 시작합니다. $sleep 초마다 Slack 채널에 연결하여 모든 새 명령을 가져옵니다. 명령은 호스트에서 PowerShell로 실행됩니다.
API를 통해 특정 Slack 채널에 메시지를 보냅니다. 메시지는 Slack 첨부 파일을 본문으로 하는 텍스트 헤더와 함께 전송됩니다.
새 프로세스를 시작하고 호스트의 PowerShell에서 명령을 실행합니다. PowerShell의 Start-Job 메서드를 사용하여 새 프로세스를 생성하고, 작업이 끝날 때까지 기다린 후 출력을 반환합니다.
실행 중인 프로세스의 현재 컨텍스트에서 호스트의 PowerShell로 명령을 실행하고 출력을 반환합니다.
특정 Slack 채널에서 가장 오래된 기간부터 현재까지의 모든 메시지를 반환합니다. 메시지는 API 사양에 따라 JSON 형식으로 반환됩니다.
Slack API 호출을 사용하여 제공된 API 토큰이 유효한지 테스트합니다.
Slack API 호출을 사용하여 현재 Slack 채널에 호스팅된 파일 목록을 반환합니다.
파일 목록을 새로 고친 다음 지정된 파일을 메모리로 다운로드하고, 새 모듈을 만든 다음 해당 모듈을 가져옵니다. 해당 모듈별 명령은 Slack 채널에 직접 입력할 수 있습니다. 다운로드된 파일은 디스크에 닿지 않습니다. 추가 테스트가 진행되는 동안 이 함수는 베타 버전으로 간주되어야 합니다. 일부 모듈은 비정상적으로 동작합니다
파일 목록을 새로 고친 다음 지정된 파일을 디스크에 다운로드합니다. 추가 저장 경로를 포함할 수 있으며, 기본값은 현재 위치입니다.
로컬 파일을 Slack 채널에 업로드합니다.
인증에 사용되는 API 토큰입니다. 이 토큰은 특정 Slack 팀의 특정 사용자를 나타냅니다. 자세한 내용은 여기에서 확인할 수 있습니다: https://api.slack.com/custom-integrations/legacy-tokens
팀에서 사용할 Slack 채널을 지정하는 채널 식별자입니다. Start-Shell이 실행되면 이 채널의 모든 텍스트는 호스트에서 명령으로 처리됩니다. 채널 ID는 웹 기반 Slack 사이트에서 채널 페이지에 접근할 때 URL에서 찾을 수 있습니다.
예: https://slackteam1.slack.com/messages/ABC123456. 채널 ID는 "ABC123456"입니다.
Import-Module ./SlackShell.psm1
Start-Shell -Token "xoxp-175828824580-175707545555-176600001223-826315a84e533c482bb7e20e8312fh45k" -Channel "ABC123456" -Sleep 5
토큰을 생성할 때 사용한 사용자와 다른 사용자로 동일한 Slack 채널에 참여하세요. 다른 사용자로 채널에 작성된 모든 내용은 스크립트를 시작할 때 사용된 동일한 로컬 사용자 컨텍스트에서 호스트에서 실행됩니다. 또는 "runjob"을 사용하여 새로 생성된 PowerShell 프로세스에서 명령을 실행할 수 있습니다.
셸과 연결을 닫습니다.
메인 프로세스의 컨텍스트에서 디렉터리를 변경합니다. 상대 경로를 사용할 수 있습니다 (예: cd ..)
슬립 시간을 변경합니다.
연결된 Slack 채널에서 사용 가능한 파일을 나열합니다.
지정된 파일을 가져옵니다. 파일은 사용 중인 Slack 채널과 공유되어야 합니다.
지정된 파일을 디스크에 다운로드하고 선택적 경로 매개변수 위치에 저장합니다. 파일은 사용 중인 Slack 채널과 공유되어야 합니다.
로컬 파일을 Slack에 업로드하고 사용 중인 채널과 공유합니다.
지정된 명령을 새 PowerShell 프로세스에서 실행합니다.
Slack API를 PowerShell에서 사용하는 것에 대한 영감은 Warren Frame에게 있습니다. 그의 저장소는 시작하기에 훌륭한 자료였습니다: https://github.com/RamblingCookieMonster/PSSlack
POSHv2로 포팅하고 개선 사항을 추가해 준 @thesubtlety에게 특별히 감사드립니다.