
PowerShell to Slack C2
此PowerShell模块包含多种利用Slack API创建命令与控制通道的函数。主函数Start-Shell会连接至用户指定的Slack频道,并使用提供的API认证令牌对指定Slack团队和用户进行身份验证。频道中输入的任何命令都将在主机上的PowerShell中执行。
SlackShell项目需要PowerShell v3及以上版本,因为其使用Invoke-RestMethod进行API调用。未来开发将继续使用当前PowerShell cmdlet和函数。不过,已在SlackShell-Poshv2.psm1中创建了适用于PowerShell v2的移植版本。
额外的PS脚本可以先上传至Slack频道,然后导入到正在运行的会话中。导入功能会下载这些文件(默认托管于https://slack-files.com),并将其导入内存。这些文件不会触碰磁盘。相反,下载功能可用于将任何文件的本地副本保存到磁盘。
本地文件可以通过API的上传功能上传到Slack频道。
如有需要,可以生成一个单独的PS进程来运行利用内置Invoke-Command cmdlet的命令。
开始监控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可以在通过Web版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进程中执行命令。
关闭Shell和连接。
更改主进程上下文中的目录。可以使用相对路径(例如cd ..)
更改休眠时间。
列出关联Slack频道中的可用文件。
导入指定文件。文件必须已与正在使用的Slack频道共享。
下载指定文件到磁盘,并存储在可选的路径参数位置。文件必须已与正在使用的Slack频道共享。
将本地文件上传到Slack,并与正在使用的频道共享。
在新的PowerShell进程中运行指定命令。
在PowerShell中使用Slack API的灵感归功于Warren Frame。他的仓库是开始学习的绝佳资源:https://github.com/RamblingCookieMonster/PSSlack
特别感谢@thesubtlety将其移植到POSHv2并进行增强。