0x00 来了
年更博主回来了
0x01 声明
0x02 前言
最近在做一些项目的时候遇到了JumpServer的堡垒机,刚好最近爆出了CVE-2023-42442的未授权访问漏洞,说是可以获取到Linux主机的历史命令,但是发现网上分享的复现过程都只有获取id的那一步,后利用过程没有。
遂自己部署环境进行了测试,先说测试结果:
1.可获取Linux主机的历史命令,可直接转换成录频文件并使用JumpServer官方的播放器进行播放。
2.可获取Windows主机以及其他堡垒机纳管的应用的记录并转换为录屏文件。
0x03 POC复现
首先根据网上公开的POC来请求一下http://192.168.123.120/api/v1/terminal/sessions/
可以看到返回了很多内容,然后再查看下JumpServer的api文档
传参只需要1个id值,尝试使用自带的接口replay/download进行下载,发现401了
接着去看看GitHub上JumpServer更新了什么
0x04 Nginx规则绕过
通过GitHub上的更新日志发现只有1条“优化 Nginx 配置文件静态录像文件获取路径”
那么继续去查看Nginx的代码,看看这个版本做了哪些改动
直接在JumpServer的开源项目docker-web中就能看到,很明了,删除了下面这段配置
location /media/replay/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/;
}
进入到docker容器jms_web中对应目录查看结构
在文件夹里有对应id的gz文件,XXX.cast.gz的是Linux的,XXX.replay.gz的是Windows的
尝试构造请求包发现403了
继续查看Nginx配置文件发现是优先匹配到了下面这部分,然后交由core进行处理了
按道理讲这部分没啥问题,但是新版本既然删除它了说明肯定在哪里出了问题,通过Fuzz JumpServer代码中遍历出来的路由发现可以通过/media/xpack/../replay的方式进行绕过
0x05 录像文件还原
到这一步其实就已经完成Linux操作记录的获取了,但是这个格式看起来的真的累,而且Windows的明明也在目录下也能获取到,不应该没办法还原
转战到JumpServer后台,在后台功能“审计台-会话审计-会话记录”中,可以下载历史会话文件,是个tar文件,和漏洞读取到的gz文件不一样
根据官方文档可知下载下来的文件是可以用他们的播放器进行播放的,播放器下载地址在这:https://github.com/jumpserver/VideoPlayer
通过播放器打开下载下载的tar文件,可以正常回放操作记录
回到录像文件存放目录,发现被我们下载过的历史记录多出了.tar和.json格式的两个文件
解压下载下来的tar文件可以看到里面有2个文件,就是同名的json和cast.gz
但是在管理员没有下载历史记录的时候,是不会有这个json和tar文件的,tar文件已知是打包了cast.gz和json文件产生的,那么这个json文件咋来呢
通过对比json文件内容和/api/v1/terminal/sessions/接口获取到的数据发现内容大致相同,尝试使用接口获取到的内容保存为json
然后再把0x04这一步获取到的文件使用gzip压缩回gz文件,因为通过接口获取到的文件虽然文件名还是cast.gz,但是实际上是已经解压缩的文件了,需要把他压缩回去
至此,录像文件的还原也完成了,尝试使用播放器打开可正常播放
Windows操作同上
0x06 利用工具
代码水平比较差,只是简单实现了获取最新一条操作记录并转为录像文件的功能
下载地址:https://github.com/HolyGu/CVE-2023-42442
使用方式:go run CVE-2023-42442.go --url http://192.168.123.120
0x07 参考
参考链接:
[1] https://docs.jumpserver.org/zh/v3/dev/rest_api/
[2] https://github.com/jumpserver/docker-web/commit/e378937df52a43eea26dc9626579493c0ec16a19
[3] https://github.com/jumpserver/VideoPlayer
原文始发于微信公众号(NearSec):红队攻防之JumpServer未授权访问漏洞(CVE-2023-42442)后利用过程分享
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论