如何进行Apache Solr DataImportHandler远程代码执行漏洞CVE-2019-0193分析


如何进行Apache Solr DataImportHandler远程代码执行漏洞CVE-2019-0193分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。2019年08月01日,Apache Solr官方发布

预警

,Apache Solr DataImport功能 在开启Debug模式时,可以接收来自请求的”dataConfig”参数,这个参数的功能与data-config.xml一样,不过是在开启Debug模式时方便通过此参数进行调试,并且Debug模式的开启是通过参数传入的。在dataConfig参数中可以包含script恶意脚本导致远程代码执行。我对此漏洞进行了应急,由于在应急时构造的PoC很鸡肋,需要存在数据库驱动,需要连接数据库并且无回显,这种方式在实际利用中很难利用。后来逐渐有新的PoC被构造出来,经过了几个版本的PoC升级,到最后能直接通过直接传递数据流的方式,无需数据库驱动,无需连接数据库且能回显。下面记录下PoC升级的历程以及自己遇到的一些问题。感谢@Badcode与@fnmsd师傅提供的帮助。分析中涉及到的与Solr相关的环境如下:Solr-7.7.2JDK 1.8.0_181一开始没有去仔细去查阅Solr相关资料,只是粗略翻了下文档把漏洞复现了,那时候我也觉得数据应该能回显,于是就开始调试尝试构造回显,但是没有收获。后来看到新的PoC,感觉自己还没真正明白这个漏洞的原理就去盲目调试,于是又回过头去查阅Solr资料与文档,下面整理了与该漏洞有关的一些概念。1.solr是在lucene工具包的基础之上进行了封装,并且以web服务的形式对外提供索引功能2.业务系统需要使用到索引的功能(建索引,查索引)时,只要发出http请求,并将返回数据进行解析即可(1) 索引数据的创建根据配置文件提取一些可以用来搜索的数据(封装成各种Field),把各field再封装成document,然后对document进行分析(对各字段分词),得到一些索引目录写入索引库,document本身也会被写入一个文档信息库(2) 索引数据的查询根据关键词解析(queryParser)出查询条件query(Termquery),利用搜索工具(indexSearcher)去索引库获取文档id,然后再根据文档id去文档信息库获取文档信息Solr DataImportHandler可以批量把数据导入到索引库中,根据

Solr文档

中的描述,DataImportHandler有如下功能:读取关系数据库中数据或文本数据根据配置从xml(http/file方式)读取与建立索引数据根据配置聚合来自多个列和表的数据来构建Solr文档使用文档更新Solr(更新索引、文档数据库等)根据配置进行完全导入的功能(full-import,完全导入每次运行时会创建整个索引)检测插入/更新字段并执行增量导入(delta-import,对增加或者被修改的字段进行导入)调度full-import与delta-import可以插入任何类型的数据源(ftp,scp等)和其他用户可选格式(JSON,csv等)通过搜索到的资料与官方文档中对DataImportHandler的描述,根据我的理解整理出DataImport处理的大致的流程图如下(只画了与该漏洞相关的主要部分):几个名词解释:Core:索引库,其中包含schema.xml/managed-schema,schema.xml是模式文件的传统名称,可以由使用该模式的用户手动编辑,managed-schema是Solr默认使用的模式文件的名称,它支持在运行时动态更改,data-config文件可配置为xml形式或通过请求参数传递(在dataimport开启debug模式时可通过dataConfig参数传递)通过命令行创建core-d 参数是指定配置模板,在solr 7.7.2下,有_default与sample_techproducts_configs两种模板可以使用通过web页面创建core一开始以为从web页面无法创建core,虽然有一个Add Core,但是点击创建的core目录为空无法使用,提示无法找到配置文件,必须在solr目录下创建好对应的core,在web界面才能添加。然后尝试了使用绝对路径配置,绝对路径也能在web界面看到,但是solr默认不允许使用除了创建的core目录之外的配置文件,如果这个开关设为了true,就能使用对应core外部的配置文件:后来在回头去查阅时在

Solr Guide 7.5文档

中发现通过configSet参数也能创建core,configSet可以指定为_default与sample_techproducts_configs,如下表示创建成功,不过通过这种方式创建的core的没有conf目录,它的配置是相当于链接到configSet模板的,而不是使用copy模板的方式:通过以上两种方式都能创建core,但是要使用dataimport功能,还是需要编辑配置solrconfig.xml文件,如果能通过web请求方式更改配置文件以配置dataimport功能就能更好利用这个漏洞了。schema.xml/managed-schema:这里面定义了与数据源相关联的字段(Field)以及Solr建免费云主机域名立索引时该如何处理Field,它的内容可以自己打开新建的core下的schema.xml/managed-schema看下,内容太长就不贴了,解释下与该漏洞相关的几个元素:dataConfig:这个配置项可以通过文件配置或通过请求方式传递(在dataimport开启Debug模式时可以通过dataConfig参数),他配置的时怎样获取数据(查询语句、url等等)要读什么样的数据(关系数据库中的列、或者xml的域)、做什么样的处理(修改/添加/删除)等,Solr为这些数据数据创建索引并将数据保存为Document根据官方

漏洞预警描述

,是DataImportHandler在开启Debug模式时,能接收dataConfig这个参数,这个参数的功能与data-config.xml一样,不过是在开启Debug模式时方便通过此参数进行调试,并且Debug模式的开启是通过参数传入的。在dataConfig参数中可以包含script脚本,在

文档

搜到一个ScriptTransformer的例子:可以看到在script中能执行java代码,于是构造下PoC(通过logs查看相关报错信息查看PoC构造出现的问题),这个数据库是可以外连的,所以数据库的相关信息可以自己控制,测试过是可以的(只是演示使用的127.0.0.1):在ScriptTransformer那个例子中,能看到row.put的字样,猜测应该是能回显的,测试下:这里只能查看id字段,name字段看不到,也没有报错,然后尝试了下把数据put到id里面:能看到回显的信息。一开始不知道为什么put到name不行,后来看到在第三阶段的PoC,又回过头去查资料才意识到dataConfig与schema是配合使用的。因为在schema中没有配置name这个field,但是默认配置了id这个fileld,所以solr不会把name这个字段数据放到Document中去而id字段在其中。在第三阶段的PoC中,每个Field中的name属性都有”_s”,然后去搜索发现可以在schema配置文件中可以配置dynamicField,如下是默认配置好的dynamicField:在上面的相关概念中对这个字段有介绍,可以翻上去查看下,测试下,果然是可以的:只要dynamicField能匹配dataConfig中field的name属性,solr就会自动加到document中去,如果schema配置了相应的field,那么配置的field优先,没有配置则根据dynamicField匹配。在文档中说到JdbcDataSource可以使用JNDI,测试下能不能进行JNDI注入:这里有一个JNDI+LDAP的恶意

demo

。使用这种方式无需目标的CLASSPATH存在数据库驱动。这个阶段的PoC来自@fnmsd师傅,使用的是

ContentStreamDataSource

,但是文档中没有对它进行描述如何使用。在

stackoverflower

找到一个使用例子:在相关概念中说到了ContentStreamDataSource能接收Post数据作为数据源,结合第一阶段说到的dynamicField就能实现回显了。只演示下效果图,不给出具体的PoC:后来回过头去看其他类型的DataSource时,使用URLDataSource/HttpDataSource也可以,文档中提供了一个例子:构造测试也是可行的,可以使用http、ftp等协议看完上述内容,你们掌握如何进行Apache Solr DataImportHandler远程代码执行漏洞CVE-2019-0193分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注云编程开发博客行业资讯频道,感谢各位的阅读!

相关推荐: Python建代理配合burp怎样实现自动免费用水

今天就跟大家聊聊有关Python建代理配合burp怎样实现自动免费用水,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。0x01 前言 本文只是对某校园热水服务app做个测试,其实本人并没有做大坏事,并未传…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/06 09:40
下一篇 02/06 09:40