Apache Solr RCE 远程执行漏洞 CVE-2017-12629

漏洞描述

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞:XML实体扩展漏洞(XXE)和远程命令执行漏洞(RCE),二者可以连接成利用链,编号均为CVE-2017-12629。

影响版本

Apache Solr < 7.1

环境搭建

https://github.com/vulhub/vulhub.git
cd vulhub/solr/CVE-2017-12629
docker-compose build
docker-compose up -d

漏洞复现

远程命令执行

先请求url地址获取 core 内容

http://xxx.xxx.xxx.xxx:8983/solr/admin/cores

通过查看代码,能够触发命令执行的事件有两个:postCommit 和 newSearcher

使用 postCommit

第一个请求包用于载入缓存中

exe : ping 执行的命令

dir: 命令存在的目录位置

args:命令参数

如下请求包执行的是 /bin/ping 1.1.1.1

第二个请求包用于更新缓存并执行命令

注意 第一个请求包的这个位置 "name":"newlistener-1",

listerer的名字需要替换,例如第一次 为 newlistener-1 ,第二次则需要改为 newlistener-2

注意 第二个请求包的这个位置 [{"id":"test"}],

同第一个请求包的name,每执行一次就需要更换 id ,例如第一次 为 test ,第二次则需要改为 tset-2

注意 Content-Type: application/json 需要添加

不更改执行发生报错示例

进入docker容器查看发现命令已经执行

使用 newSearcher

使用 newSearcher可以直接加载入缓存执行命令

请求包如下

注意点同上,也需要每次执行更改 "name":"newlistener-2" 的参数

成功执行了创建文件的命令

关于

如果想要执行其他命令,则需要命令的的位置,例如执行ping,则需要设置dir参数为 /usr/bin/ping 或者 /bin/ping,如果需要检测漏洞是否存在则可以使用 dnslog来检测

漏洞利用POC

如果shell或dnslog无反应,可以选择更改一下POC的部分参数执行需要的代码

参考文章

Apache Solr远程代码执行漏洞(CVE-2017-12629)从利用到入侵检测

cve-2017-12629 apache solr xxe & rce 漏洞分析

Last updated

Was this helpful?