jumpserver 远程命令执行RCE漏洞复现和利用
0x01 简介
- JumpServer远程执行漏洞 RCE EXP
- Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,是内网中的一种集权系统,拿下后基本上都是可以控制大量的服务器。
- 项目地址:https://github.com/jumpserver/jumpserver
0x02 漏洞原理
远程命令执行漏洞:由于 JumpServer 某些接口未做授权限制,攻击者可构造恶意请求获取到日志文件获取敏感信息,再通过敏感信息获取一个20s的token,最后利用这个token去执行相关API操作控制其中所有机器或者执行任意命令。
0x03 影响版本:
- JumpServer < v2.6.2
- JumpServer < v2.5.4
- JumpServer < v2.4.5
- JumpServer = v1.5.9
0x04 复现环境搭建注意坑点
环境搭建推荐使用一键安装,因为环境比较麻烦,而且还得是旧版的,这里是v2.6.1
安装脚本V2.6.1 https://www.o2oxy.cn/wp-content/uploads/2021/01/quick\_start.zip
注意要给环境配置高一点,否则会卡死。(我是 Centos 7 系统 4核 8G)
使用一件脚本的时候,推荐不使用外部 mysql和redis,这样他就会docker自己创建数据库,省的自己配报错。
搭建好了,服务一键启动 ./jmsctl.sh restart
搭建好了,默认的账户和密码是 admin admin
http://10.211.55.22:8080/core/auth/login/
登陆之后还不能直接用,还有配置一下,分配一下服务器才能使用。
1、创建一个系统用户
- 系统用户是 JumpServer 跳转登录资产时使用的用户
2、创建管理用户
管理用户是资产(被控服务器)上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户
我的被管理主机就是 root root
3、创建资产
就是要管理的终端
4、资产授权
只有给资产授权,控制台才有机器,才能管理
5、web终端连接
访问web终端:
1 | http://10.211.55.22:8080/luna/ |
0x05 漏洞复现
1、请求未授权 socketweb
1 | ws://10.211.55.22:8080/ws/ops/tasks/log/ |
请求log文件
1 | {"task":"/opt/jumpserver/logs/gunicorn"} |
2、获取system_user user_id asset_id 这三个重要参数
自己搜索一下这三个id
所以获取到的是
1 | asset_id=230f921b-be1c-4343-8bab-57d4410606bb&cache_policy=1&system_user_id=03705092-18e7-4b65-a12a-7991f9c50740&user_id=0cae929c-5f7a-41a4-b873-bc9d28613c4c |
3、对应填入EXP中
exp为了美观放到最后
1 | 文件最后需要修改的: |
4、成功利用:
后利用:创建超管
获取到shell,我们可以直接创建超管,毕竟主机权限没什么用,登陆系统之后才有大量的主机。
命令行创建超管
1 | 切换到目录 |
超管登陆成功
EXP
EXP 代码 仓库 https://github.com/Skactor/jumpserver\_rce
我实测,这个手动获取 asset_id system_user_id user_id 这三个可以正常触发漏洞,但是好多自动化获取多少有点问题,反正我的是没成功。
1 | import os |