CVE-2020-14882

漏洞描述:

​ Oracle WebLogic Server 远程代码执行漏洞 (CVE-2020-14882)POC 被公开,未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求,利用该漏洞在受影响的 WebLogic Server 上执行任意代码。它们均存在于WebLogic的Console控制台组件中。此组件为WebLogic全版本默认自带组件,且该漏洞通过HTTP协议进行利用。

环境搭建:

​ 使用Weblogic 12.2.1.3版本,采用docker环境,使用vulhub搭建测试靶场

![image-20240522205352957](D:tyOWASP未授权访问image-20240522205352957.png)

执行命令创建容器:

docker-compose up -d

搭建完毕后,访问http://192.168.121.128:7001/console/进入后台登录界面

![image-20240522205732637](D:tyOWASP未授权访问image-20240522205732637.png)

POC

这里利用cve-2020-14882提供的payload构建以下url:

http://192.168.121.128:7001/console/css/%252E%252E%252Fconsole.portal

即对“../”url编码两次得“%252E%252E%252F”,即可越过登录,直接访问后台
![image-20240522210059226](D:tyOWASP未授权访问image-20240522210059226.png)

CVE-2023-42442

漏洞描述:

​ JumpServer是一款开源的堡垒机和权限管理系统,旨在帮助企业实现对服务器和网络设备的安全管理和访问控制。JumpServer的权限管理存在缺陷,未经授权的远程攻击者可以下载历史会话连接期间的所有操作日志。经过分析和研判,该漏洞利用难度低,可导致敏感信息泄漏。

影响版本:

3.0.0 <= version <= 3.5.4

3.6.0 <= version <= 3.6.3

漏洞复现:

​ 这里我选用JumpServer3.4.1版本进行演示,执行:

curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v3.4.1/quick_start.sh | bash在linux上下载安装JumpServer3.4.1版本

![image-20240523190244352](D:tyOWASP未授权访问image-20240523190244352.png)

​ 等待镜像拉取完成,进入安装目录,输入./jmsctl.sh start启动服务。

![image-20240523190354211](D:tyOWASP未授权访问image-20240523190354211.png)

​ 访问 your-ip:80进入页面,初次登录账号密码均为admin

![image-20240523190653874](D:tyOWASP未授权访问image-20240523190653874.png)

​ 为了方便演示,可以在用户管理和资产管理创建用户和资产,来模拟真实效果

![image-20240523190846223](D:tyOWASP未授权访问image-20240523190846223.png)

漏洞POC

​ 构建http://your-ip/api/v1/terminal/sessions/可直接绕过登录,直接获取到端口暴露出来的用户信息

![image-20240523191641548](C:UsersaAppDataRoamingTyporatypora-user-imagesimage-20240523191641548.png)

漏洞分析:

属于严重的高危漏洞,对于处于漏洞版本的用户建议立即升级最新版本

https://github.com/jumpserver/jumpserver/tags

简要描述成因:JumpServer采用了Django Rest Framework框架提供的BasePermission作为权限控制。

![img](D:tyOWASP未授权访问65b194686bfd1ffe14a1bb1b4a2395ae.jpeg)

里面会有两个方法需要自己定义,通常需要实现has_permission、has_object_permission中的一个或两个方法

has_permission,可以对列入黑名单的IP进行全局权限检查,如果IP已被列入黑名单,则拒绝该请求。

has_object_permission,它的作用就是允许对象的所有者对其进行编辑,而对于其它用户只允许进行只读操作,比如对于GET、HEAD、OPTIONS,即只读操作,返回 True。

正如Django Rest Framework官方所述,has_permission方法可以提供一个基本的权限检查,用于验证用户是否具有访问整个API视图的权限。而has_object_permission方法可以在has_permission验证通过后,进一步验证用户是否具有访问特定对象的权限,所以为了确保安全性,最优的方式就是在自定义权限类中同时实现这两个方法。

![img](D:tyOWASP未授权访问4f5dbe7e26e6bd91973cc2c7d09970eb.jpeg)

然而JumpServer只实现了has_object_permission方法,并且IsSessionViewSet这个类,是处理与Session相关的API请求,所以直接访问“api/v1/terminal/sessions”可查看保留下来的各类信息。