安全矩阵

 找回密码
 立即注册
搜索
查看: 1406|回复: 0

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

[复制链接]

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2021-10-13 18:04:00 | 显示全部楼层 |阅读模式
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


点击 Save 抓包,更改mergerepoPath后的value值
C:\\Windows\\System32\\cmd.exe /k dir&

此处使用 /k 是因为这样命令执行完会保留进程不退出,而 /c 后执行完会退出
这样好像没有回显
分析一下,下图中,红圈的两个字段都是可以执行任意命令的地方,点击save会把这两个字段再加上上面那个字段都提交,我第一次直接save抓包替换payload的时候没有执行,报的500错误,然后修改了这俩字段的默认值(随便改一个,点save保存),修改后可执行成功

哦 我用的服务器是搭在linux上的,需要linux命令
在前端显示是无法执行实际后端是已经处理并执行了命令)**
换成bash -c "ls";&
试了好几遍还是不行
看看别人的源码分析
漏洞点是出现在 Yum Repository 插件中,当配置 Yum 的createrepo或者mergerepo时

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

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


在执行命令前先对命令解析,CommandLine.parse(),会以空格作为分隔,获取可执行文件及参数。
最终是调用了Runtime.getRuntime().exec()执行了命令。
例如,用户传入的 command 是cmd.exe /c whoami,最后到getRuntime().exec()方法就是Runtime.getRuntime().exec({"cmd.exe","/c","whoami"})。
所以漏洞的原理也很简单,就是在createrepo或者mergerepo路径设置的时候,该路径可以由用户指定,中途拼接了--version字符串,最终到了getRuntime.exec()执行了命令。

妈呀测试了好几次还是不行,留着以后二刷三刷测吧
下面是大佬的漏洞代码加几次补丁绕过原理分析


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-8 12:28 , Processed in 0.013478 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表