Skip to content

Latest commit

 

History

History
79 lines (40 loc) · 3.8 KB

nexus 远程命令执行 (CVE-2019-5475)##.md

File metadata and controls

79 lines (40 loc) · 3.8 KB

nexus 远程命令执行 (CVE-2019-5475)

描述: Sonatype Nexus Repository Manager(NXRM)是美国Sonatype公司的一款Maven仓库管理器。 该漏洞默认存在部署权限账号,成功登录后可使用“createrepo”或“mergerepo”自定义配置,可触发远程命令执行漏洞。 用户名密码:admin:admin123

影响版本

Nexus Repository Manager OSS <= 2.14.13

Nexus Repository Manager Pro <= 2.14.13

限制:admin权限才可触发漏洞

右上角登录管理员

然后找到漏洞位置:Capabilities - Yum:Configuration - Settings

image-20211012194117252

点击 Save 抓包,更改mergerepoPath后的value值

C:\\Windows\\System32\\cmd.exe /k dir&

image-20211012194424407

此处使用 /k 是因为这样命令执行完会保留进程不退出,而 /c 后执行完会退出

这样好像没有回显

分析一下,下图中,红圈的两个字段都是可以执行任意命令的地方,点击save会把这两个字段再加上上面那个字段都提交,我第一次直接save抓包替换payload的时候没有执行,报的500错误,然后修改了这俩字段的默认值(随便改一个,点save保存),修改后可执行成功

image-20211012195054018

哦 我用的服务器是搭在linux上的,需要linux命令

在前端显示是无法执行实际后端是已经处理并执行了命令)**

image-20211012201135234

换成bash -c "ls";&

试了好几遍还是不行

看看别人的源码分析

漏洞点是出现在 Yum Repository 插件中,当配置 Yum 的createrepo或者mergerepo

img

代码层面会跳到YumCapabilityactivationCondition方法中。

img

在上面Path of "createrepo"中设置的值会通过getConfig().getCreaterepoPath()获取到,获取到该值之后,调用this.validate()方法

img

传进来的path是用户可控的,之后将path拼接--version之后传递给commandLineExecutor.exec()方法,看起来像是执行命令的方法,而事实也是如此。跟进CommandLineExecutor类的exec方法

image-20211012202417292

在执行命令前先对命令解析,CommandLine.parse(),会以空格作为分隔,获取可执行文件及参数。

最终是调用了Runtime.getRuntime().exec()执行了命令。

例如,用户传入的 command 是cmd.exe /c whoami,最后到getRuntime().exec()方法就是Runtime.getRuntime().exec({"cmd.exe","/c","whoami"})

所以漏洞的原理也很简单,就是在createrepo或者mergerepo路径设置的时候,该路径可以由用户指定,中途拼接了--version字符串,最终到了getRuntime.exec()执行了命令。

image-20211012202758143

妈呀测试了好几次还是不行,留着以后二刷三刷测吧

下面是大佬的漏洞代码加几次补丁绕过原理分析

https://www.freebuf.com/vuls/242500.html