SuperShell溯源反制-默认密钥/密码利用
介绍:
https://github.com/tdragon6/Supershell
Supershell是一个集成了reverse_ssh服务的WEB管理平台,使用docker一键部署(快速构建),支持团队协作进行C2远程控制,通过在目标主机上建立反向SSH隧道,获取真正的完全交互式Shell,同时支持多平台架构的客户端Payload,客户端Payload的大小为几MB,可以理解为在目标主机上部署了一个几MB的ssh服务器,然后获取了一个ssh shell;Supershell集成了客户端管理、客户端Payload生成、交互式Shell、文件管理、文件服务器、内存注入、安装服务、迁移guid、本地原生sftp命令传输文件、本地ssh隧道端口转发和备忘录等功能。
公网分布
漏洞利用
SuperShell部署时存在以下配置信息:
其中 user/pwd 为web登录管理员信息,默认为 tdragon6/tdragon6;global_salt 为JWT加密salt,默认为Be sure to modify this key,share_pwd 为远控shell共享密钥,默认为tdragon6。
其中user/pwd几乎人人都会修改,global_salt由于注释中的提醒,只有少数马虎的安全人员会忘记修改,而share_pwd由于其作用模糊,在日常使用中几乎不会用到,故很容易被管理员忽视,然而由于SuperShell的设计缺陷,三者任一使用默认配置都会导致Supershell存在接管风险。
默认user/pwd
直接 tdragon6/tdragon6 web登录
默认jwt token
查看登录逻辑:
get_jwt_token函数:
即用户成功登录后会将用户名与有效时间生成JWT令牌,存储在cookie中作为登录凭据。
使用默认salt伪造令牌:get_jwt_token("admin", "Be sure to modify this key", 999999)
如服务端采用同样salt即可绕过登录:
默认share_pwd
在测试jwt伪造时,发现服务端并未校验用户名有效性,即JWT令牌合法即可获取管理员权限,查看共享shell鉴权逻辑:
发现 share_password 有效后会使用相同salt生成JWT令牌存储在share_token中,用户名为anonymous,而前述可知用户名不影响管理员鉴权,故可直接将cookies中的share_token替换为token,即可绕过登录:
原文链接:https://mp.weixin.qq.com/s/kspLJYFfB6tD7d7Pao94Lg