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时
代码层面会跳到YumCapability的activationCondition方法中。
在上面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()执行了命令。
妈呀测试了好几次还是不行,留着以后二刷三刷测吧 下面是大佬的漏洞代码加几次补丁绕过原理分析
|